在gnuplot中,如果“set datafile missing”,如何忽略“nan”和“-nan”?

时间:2013-09-10 11:44:19

标签: gnuplot nan missing-data infinity

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

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

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

是否有可能在gnuplot命令中嵌入grep -v nan,甚至某种regexp以排除任何可以想象的非数值数据?

1 个答案:

答案 0 :(得分:7)

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

这给出了以下输出:

enter image description here

因此plot命令会跳过所有丢失的数据点。如果此变体不够,您可以优化sed过滤器,将所有非数值替换为?

这很好用,但只允许选择列,例如使用using 1:2,但不对列进行计算,例如using ($1*0.1):2。要允许此操作,您可以过滤掉包含nan-infgrep的任何行,就像在gnuplot missing data with expression evaluation中完成一样(感谢@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