Gnuplot 嵌套的do和if语句未命中绘图

Gnuplot 嵌套的do和if语句未命中绘图,gnuplot,Gnuplot,我正在使用 G N U p L O T 版本4.6补丁级别4最后修改日期2013-10-02 构建系统:Linux x86_64 我想用它来从一个大致如下设置的文件中绘制数据 0.0 a1 b1 0.0 a2 b2 … 0.1 a1 b1* 0.1 a2 b2* ... 对于第一列中的每个唯一值,我想在a上绘制b。为此,我创建了一个包含条件打印的do循环 为[t=0:34]{ 打印0.2000*t 绘图'twopi5101/profile.dat'u($1==0.2000*t?($3-7.5

我正在使用

G N U p L O T
版本4.6补丁级别4最后修改日期2013-10-02
构建系统:Linux x86_64

我想用它来从一个大致如下设置的文件中绘制数据

0.0 a1 b1
0.0 a2 b2

0.1 a1 b1*
0.1 a2 b2*
...

对于第一列中的每个唯一值,我想在a上绘制b。为此,我创建了一个包含条件打印的do循环

为[t=0:34]{
打印0.2000*t
绘图'twopi5101/profile.dat'u($1==0.2000*t?($3-7.5):1/0):8个notitle w l lt 1 lc 1,\
“twopi5101/profile.dat”u($1==0.2000*t)($3-7.5):1/0):9 notitle w l lt 1 lc 2
}

不幸的是,此循环(以及其他文件的类似循环)将始终错过一些绘图

0.0
0.2
0.4
0.6
警告:跳过没有有效点的数据文件
警告:跳过没有有效点的数据文件
更多>;打印0.2000*t;地块'twopi5101/profile.dat'u($1==0.2000*t?($3-7.5):1/0):8个notitle w l lt 1 lc 1,'twopi5101/profile.dat'u($1==0.2000*t?($3-7.5):1/0):9个notitle w l lt 1 lc 2
^
x范围无效

但是,如果我手动输入0.6,则根本没有问题

gnuplot>plot'twopi5101/profile.dat'u($1==0.6?($3-7.5):1/0):8 notitle w lt 1 lc 1\ “twopi5101/profile.dat”u($1==0.6?($3-7.5):1/0):9不带lt 1 lc 2
gnuplot>

对于为什么会发生这种情况,似乎没有合乎逻辑的解释,甚至没有一种缺分模式。
已跳过[0.0:6.0]gnuplot的间隔:
0.6,1.2,1.4,2.4,2.8,3.4,3.8,4.6,4.8,5.6,5.8
每次我运行循环时,它都会保持一致,即使我只在该间隔的一部分运行循环(例如,从0.6运行到2.0将再次跳过0.6、1.2和1.4)

我在许多其他情况下也遇到过同样的情况,即间隔更大/绘图更多。我甚至不知道是什么导致了这样的事情,也不知道我对循环的格式化是否有错误来解释它。

(我使用的终端是“wxt”或postscript增强型)

这是因为在等式上测试浮点值通常不是一个好主意。让我们考虑例如:

gnuplot> print 0.6==0.6
1
gnuplot> print 0.6==3*0.2
0
这是因为像
0.2
这样的数字不能准确表示

我建议首先将数据中的第一列转换为整数值,例如

floor(($1 + 0.05)*10)
这里假设所讨论的列只包含
0.1
的倍数。存在系数
0.05
,以确保可能的不准确输入,例如
0.1000001
0.099999
转换为
1

该转换值可用于
绘图
命令内的过滤,例如

plot 'twopi5101/profile.dat' u (floor(($1+0.05)*10)==2*t?($3-7.5):1/0):8
或者,可以用类似于abs($1-0.2000*t)的值替换条件
$1==0.2000*t