My answer is based on this suggestion how to mirror Matlab's spy function.
However, you'll have to reformat your data file to look like this (saved as data.dat):
NaN 10 NaN 15
5 20 NaN NaN
10 10 20 NaN
This will help distinguish between the elements that should be plotted (the numbers) and those that should not appear (NaN).
Here's the code which will produce the plot you sketched in your question:
# the code will plot the numbers as labels:
set style data labels
# set up x- and y-coordinates based on the rows and columns
xcoord(N) = (N)
ycoord(N) = (column(0)+1)
# define a symbol to be used as label:
# every NaN will be empty (" "),
# and everything not equal to NaN (ne), will be a string
# of the actual element
symbol(N) = strcol(N) ne "NaN" ? strcol(N) : " "
# define the ranges, use reverse with the yrange
set xrange [0:5]
set yrange [0:4] reverse
# set the tics (this is something you already had)
set xtics ("2010" 1, "2011" 2, "2012" 3, "2013" 4)
set ytics ("M1" 1, "M2" 2, "M3" 3)
# the actual plot command
# N will count through the number of columns
plot for [N=1:4] 'data.dat' using (xcoord(N)):(ycoord(N)):(symbol(N)) w labels
The plot you will get looks like this:

plot. What is the correct usage ofusinghere?