GNUPLOT:stats在循环中给出错误的结果

GNUPLOT:stats在循环中给出错误的结果,gnuplot,Gnuplot,我有一个数据文件,其中矩阵被分割成不同的gnuplot索引。我想做一个密度图随时间(=指数)变化的动画 问题是我想保持cbrange的最大值和最小值对称,同时允许它随时间变化 在下面的代码中,第一个“stats”命令只给出循环的块数。前缀为“B”的第二个“stats”命令应该为每个索引处的矩阵提供最大值和最小值,这样我就可以正确设置cbrange 当代码第一次进入循环时,它就工作了(对于i=1),stats给了我正确的数字。从第二个循环开始(i=2)统计给了我错误的数字 我尝试在stats命令之

我有一个数据文件,其中矩阵被分割成不同的gnuplot索引。我想做一个密度图随时间(=指数)变化的动画

问题是我想保持cbrange的最大值和最小值对称,同时允许它随时间变化

在下面的代码中,第一个“stats”命令只给出循环的块数。前缀为“B”的第二个“stats”命令应该为每个索引处的矩阵提供最大值和最小值,这样我就可以正确设置cbrange

当代码第一次进入循环时,它就工作了(对于i=1),stats给了我正确的数字。从第二个循环开始(i=2)统计给了我错误的数字

我尝试在stats命令之前将
cbrange
zrrange
设置为
[*:*]
,但没有帮助

代码如下:

set terminal gif animate delay 0.5
set output 'foobar.gif'
stats 'dat-rw2d.dat' nooutput

set pm3d map
set palette defined (-1 "blue", 0 "white", 1 "red")

print STATS_blocks

do for [i=1:int(STATS_blocks)] {
    print i

    stats "dat-rw2d.dat" index (i-1) matrix nooutput prefix "B"

    max = (B_max > -B_min)?(B_max):(-B_min)
    set cbrange [-max:max]

    print B_max, B_min

    splot 'dat-rw2d.dat' matrix index (i-1)
}
如果我没有绘制任何东西(下面的代码),统计数据会给我正确的数字。因此,实际上是“喷溅”造成了问题。它修正了一些尺度,阻碍了统计?我尝试在统计数据之前
设置cbrange[*:*]
,但它没有解决问题

do for [i=1:int(STATS_blocks)] {
    print i

    stats "dat-rw2d.dat" index (i-1) matrix nooutput prefix "B"

    max = (B_max > -B_min)?(B_max):(-B_min)
    set cbrange [-max:max]

    print B_max, B_min
}

由于它看起来像一个bug,我可以提出一个解决方案(糟糕的IMHO),但这就是我想到的:

system
命令中调用
gnuplot
,将变量保存在文件
dummy.txt
中,然后从脚本加载该文件

stats 'test.txt' nooutput
do for [cntr=1:int(STATS_blocks)] {

    # next line doesn't work 
    # stats 'test.txt' index (cntr-1) matrix prefix "B"

    # next 3 lines do the hack
    cmd=sprintf('gnuplot -e "stats \"test.txt\" index %d matrix nooutput prefix \"B\"; save var \"dummy.txt\""',cntr-1)
    system(cmd)
    load("dummy.txt")

    print cntr, B_max, B_min
    max = (B_max > -B_min)?(B_max):(-B_min)
    set cbrange [-max:max]

    splot 'test.txt' matrix index (cntr-1) w l
}
如果有人愿意重现问题,下面是我的
test.txt
文件:

0 0 
0 1 


1 1 
1 2 


2 2 
3 3 

如果没有为
统计数据指定任何列,gnuplot将尝试猜测一个合适的默认列。对于
矩阵
选项,这似乎是一个错误的选项(可能是x值或y值,或矩阵大小),它不会随块而改变

您必须告诉gnuplot明确地将第三列用于
stats

stats 'dat-rw2d.dat' nooutput

set pm3d map
set palette defined (-1 "blue", 0 "white", 1 "red")

print STATS_blocks

do for [i=1:int(STATS_blocks)] {
    print i

    stats "dat-rw2d.dat" using 3 index (i-1) matrix nooutput prefix "B"

    max = (B_max > -B_min)?(B_max):(-B_min)
    set cbrange [-max:max]

    print B_max, B_min

    splot 'dat-rw2d.dat' matrix index (i-1)
}

splot
帮助之后添加
set cbrange[*:*]
会吗?我已经尝试了
set cbrange[*:*]
,但它不起作用。我在其他地方也读过这篇文章。。。但是它不起作用。在
帮助xrange
(对所有范围都有效)中,它说自动缩放需要一个星号。我知道自动缩放的星号。问题是,即使强制执行自动缩放,
stats
在执行
splot
命令后仍然给出错误的答案。这似乎是一个真正的bug。对我来说,它看起来像一个gnuplot bug,我甚至尝试添加一个
reset
,但它仍然失败。谢谢,它正在工作。。。但是gnuplot文档也有问题。在
help stats
中,您可以看到:“当指定
matrix
时,
using
选项被忽略,“z”值被视为一维数据集。”