首页 > 解决方案 > 在 Gnuplot 中添加条件绘图强制“此图中没有可用数据自动缩放轴范围”

问题描述

我使用一个简单的代码从一个文件创建一系列图像,具体取决于条件。这样做的时候我意识到:

splot [1:150][1:150][] "dinozaur" u 5:6:(($4==0.4+0.0025*3)?$2:1/0)

...不起作用,但是:

splot [1:150][1:150][] "dinozaur" u 5:6:(($4==0.40750)?$2:1/0)

...作品。

然而,两者

splot [1:150][1:150][] "dinozaur" u 5:6:(($4==0.5+0.0025*3)?$2:1/0)

...和

splot [1:150][1:150][] "dinozaur" u 5:6:(($4==0.50750)?$2:1/0)

工作。

如果我收到错误,它是标题中的错误。我正在做某种明显的错误吗?

我附上了一个数据文件片段,第 4 列的值为 0.40750 https://www.dropbox.com/s/lpv0m2wfoo3qwl7/dinozaur?dl=0

标签: if-statementplotconditionalgnuplot

解决方案


计算机上的浮点运算并不精确。例如,0.4+0.0025*3 可能与 0.40750 不完全相同。有关详细信息,请查看以下问题:浮点数学是否损坏?

您通常希望避免测试浮点数的严格相等性。相反,您可以测试两个数字是否足够接近。例如,

eps = 1E-10
splot [1:150][1:150][] "dinozaur" u 5:6:((abs($4 - (0.4+0.0025*3)) < eps) ? $2 : 1/0)

应该管用。


推荐阅读