Gnuplot绘制2D矩阵图像,想要为每个单元格绘制边框

13

我想使用gnuplot绘制一个18x18的矩阵。以下是我的代码:

set size ratio 1
set palette gray negative
set xrange[-0.5:17.5]
set yrange[-0.5:17.5]
set cbrange[-0.2:0.8]
set xtics 0,1,17
set ytics 0,1,17
set xtics offset -0.5,0
set title "Resolusition Matrix for E"
plot "Mat" matrix w image noti

然后我得到了这样一个无框表格:

enter image description here

现在我想要给每个单元格添加边框,展现效果如下:

enter image description here

谢谢。

1个回答

14

对于您的情况,您可以设置一个微小的刻度,该刻度位于两个像素之间的边界上,并在它们上面绘制网格:

set size ratio 1
set palette gray negative
set autoscale xfix
set autoscale yfix
set xtics 1
set ytics 1
set title "Resolution Matrix for E"

set tics scale 0,0.001
set mxtics 2
set mytics 2
set grid front mxtics mytics lw 1.5 lt -1 lc rgb 'white'
plot "Mat" matrix w image noti

注意,set grid front也会将坐标轴刻度线调整到最前面。为了避免这种情况,您可以将刻度线比例缩小到0。对于小刻度线,您必须使用非常小的数字,0将省略小刻度线的网格线。

使用4.6.3版本的结果如下:

enter image description here

编辑:为了独立控制网格线和坐标轴刻度标签,您可以使用未使用的x2y2绘制网格线(灵感来自How do I draw a vertical line in gnuplot?的答案):

set size ratio 1
set palette gray negative
# grid lines
set x2tics 1 format '' scale 0,0.001
set y2tics 1 format '' scale 0,0.001
set mx2tics 2
set my2tics 2

# labeling
set xtics 5 out nomirror
set ytics 5 out nomirror

set grid front mx2tics my2tics lw 1.5 lt -1 lc rgb 'white'

set xrange[-0.5:39.5]
set yrange[-0.5:39.5]
set x2range[-0.5:39.5]
set y2range[-0.5:39.5]

plot "Mat" matrix w image notitle

使用 gnuplot 4.6 及以上版本需要设置显式范围,以使未使用的 x2 轴和 x 轴相等。可以使用 stats 命令从数据文件中提取信息。

使用版本 5 及以上,则可使用 set link 命令,无需使用繁琐的 set *range 命令。你可以这样写:

set autoscale fix
set link x
set link y

结果:

enter image description here


现在又出现了另一个问题。我有一个更大的矩阵80x80,标签看起来非常繁忙。我想避免刻度线下面的数字,但保留刻度线本身以显示网格。 - Kai
@Kai,我找到了我认为是最佳解决方案,可以独立控制标签和网格线。 - Christoph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接