8

gnuplot 命令set datafile missing "nan"告诉 gnuplot 忽略nan数据文件中的数据值。

如何同时忽略nan-nan?我在gnuplot中尝试了以下内容,但是第一条语句的效果被下一条覆盖了。

gnuplot> set datafile missing "-nan"
gnuplot> set datafile missing "nan"

是否有可能以某种方式将 a 嵌入grep -v nan到 gnuplot 命令中,或者甚至是某种正则表达式来排除任何可以想象的非数字数据?

4

1 回答 1

8

无法对 使用正则表达式set datafile missing,但您可以使用任何程序在绘图之前过滤数据,并用一个字符替换正则表达式,例如?您设置为标记缺失数据点的字符。

这是一个完成您最初要求的示例:过滤-naninf。为了测试,我使用了以下数据文件:

1 0
2 nan
3 -inf
4 2
5 -NaN
6 1

绘图脚本可能如下所示:

filter = 'sed -e "s/-\?\(nan\|inf\)/?/ig"'
set datafile missing "?"
set offset 0.5,0.5,0.5,0.5
plot '< '.filter.' data.txt' with linespoints ps 2 notitle

这给出了以下输出:

在此处输入图像描述

因此 plot 命令会跳过所有缺失的数据点。如果此变体还不够,您可以细化sed过滤器以用 替换任何非数值。?

这很好用,但只允许选择列,例如 with using 1:2,但不能对列进行计算,例如using ($1*0.1):2。为此,您可以过滤掉包含 等的任何行,nan就像-infgrepgnuplot 中使用表达式评估缺失数据所做的那样(感谢@Thiru 的链接):

filter = 'grep -vi -- "-\?\(nan\|inf\)"'
set offset 0.5,0.5,0.5,0.5
plot '< '.filter.' data.txt' with linespoints ps 2 notitle
于 2013-09-10T12:08:07.637 回答