gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:10:35 25 4
gpt4 key购买 nike

我正在 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%。

谢谢。

最佳答案

<小时/>

编辑:

下面的解决方案基本上是正确的想法,但是它在我的示例中有效,但在一般情况下不起作用,因为 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 置于最大值位置中心,并将其拉伸(stretch)总范围的 +-20%。

现在绘制“数据”矩阵w图像的结果

enter image description here

而不是

enter image description here

关于gnuplot - GNU 在动态计算点周围设置热图轴限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26369395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com