gnuplot:如何为每个月的温度绘制颜色方块?

gnuplot: how to plot color squares for each month's temperature?

我想使用 gnuplot 绘制下图(来自 Fundamentals of Data Visualization):

我希望每个位置的数据类似于:

# month temperature
01 60.0
02 78.0
03 90.0
...
12 78.0

这是我试过的。为简单起见,我已将数据转置为矩阵。

$data << EOD
1.50 1.57 1.85 2.15 1.87 1.05 1.70 1.65 1.97 1.71 1.53 1.15
4.44 4.71 4.74 3.50 3.43 4.98 4.29 4.55 3.93 3.34 3.74 4.88
8.55 9.59 5.65 0.13 9.33 4.70 8.94 7.74 4.49 6.26 0.96 1.20
EOD

unset border
unset ytics
set xlabel 'month'

set palette rgbformula -7,2,-7
set cbrange [0:10]
set cblabel "precipitation"
set xrange [-0.5:11.5]
set yrange [-0.5:2.5]
set xtics ("Jan" 0, "Feb" 1, "Mar" 2, "Apr" 3, "May" 4, \
"Jun" 5, "Jul" 6, "Aug" 7, "Sep" 8, "Oct" 9, "Nov" 10, "Dec" 11)
plot $data matrix with image

但效果却差强人意。例如,如何在正方形之间生成清晰的边界?

绘图样式with image可能不能有边框。所以,我会使用通用风格 with boxxyerror。 此外,我会添加一行 header 并循环遍历列(因为总会有 12 个月),而不是矩阵格式 检查以下示例以及 help boxxyerrorhelp sizehelp xticlabelshelp strftime 以进一步阅读。

如果您的数据位于单独的文件中,则必须相应地修改脚本。

脚本:

### plotting style boxxyerror as replacement for "with image"
reset session

$Data << EOD
# location  Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
Atlantis    1.50  1.57  1.85  2.15  1.87  1.05  1.70  1.65  1.97  1.71  1.53  1.15
Mordor      4.44  4.71  4.74  3.50  3.43  4.98  4.29  4.55  3.93  3.34  3.74  4.88
Wonderland  8.55  9.59  5.65  0.13  9.33  4.70  8.94  7.74  4.49  6.26  0.96  1.20
EOD

unset border
set xlabel 'month'
set xrange [0.5:12.5]

set yrange [:] reverse
set ytics

set palette rgbformula -7,2,-7
set cbrange [0:10]
set cblabel "precipitation"

MonthName(n) = strftime("%b",24*3600*28*n)      # get the month name from 1..12
set key noautotitle
set style fill solid 1.0 border rgb "white"
set size ratio -1       # make the boxes squares

plot for [i=1:12] $Data u (i):0:(0.5):(0.5):i+1:  \
        xtic(MonthName(i)):ytic(1) w boxxy fc palette lw 2
### end of code

结果: