GNU在动态计算点周围设置热图轴限制

时间:2014-10-14 20:06:40

标签: gnuplot heatmap

我正在使用矩阵格式的文本文件在gnuplot中绘制热图:

z11 z12 z13
z21 z22 z23
z31 z32 z33

依此类推,使用以下命令(不包括轴标记等,为简洁起见):

plot '~/some_text_file.txt' matrix notitle with image

矩阵非常大,在大多数情况下超过50 000个元素,这主要是由于我的y维度(#rows)的大小。我想知道是否有办法在y维度上更改一组最大值的限制值,同时保持x和z维度相同。例如。如果矩阵中的最大值为[4000,33],我希望我的y范围以4000 +为中心 - 让我们说y维长度的20%。

感谢。

1 个答案:

答案 0 :(得分:2)


修改

下面的解决方案基本上是正确的想法,但是它在我的示例中有效但不是一般的,因为gnuplot如何将stats命令与矩阵文件一起使用。有关详细信息,请参阅答案后的评论。


您可以使用stats执行此操作,以获取动态对应于最大值的索引。

考虑以下我命名为data的文件:

0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 5 3 4
0 1 2 3 4

如果我运行stats,我会:

gnuplot> stats "data" matrix

* FILE: 
  Records:      25
  Out of range:  0
  Invalid:       0
  Blank:         0
  Data Blocks:   1

* MATRIX: [5 X 5] 
  Mean:          2.1200
  Std Dev:       1.5315
  Sum:          53.0000
  Sum Sq.:     171.0000

  Minimum:       0.0000 [ 0 0 ]
  Maximum:       5.0000 [ 3 2 ]
  COG:           2.9434      2.0566

最大值位于[ 3 2 ]位置,意味着第3 + 1行和第2列+ 1(在gnuplot中,第一行/列将是数字0)。运行stats后,会自动创建一些变量(help stats以获取更多信息),其中包含STATS_index_max_xSTATS_index_max_y,其中存储了最大值的位置:

gnuplot> print STATS_index_max_x
3.0
gnuplot> print STATS_index_max_y
2.0

您可以使用它自动设置范围。现在,因为STATS_index_max_x实际上给你y(而不是x)的位置,你需要小心。可以通过系统调用获得获取范围的总行数(可能有更好的内置函数,我不知道):

gnuplot> range = system("awk 'END{print NR}' data")
gnuplot> print range
5

所以基本上你会这样做:

stats "data" matrix
range = system("awk 'END{print NR}' data")
range_center = STATS_index_max_x
d = 0.2 * range
set yrange [range_center - d : range_center + d]

yrange置于最大值的位置,并将其拉伸至其总范围的+ -20%。

plot "data" matrix w image的结果现在是

enter image description here

而不是

enter image description here