【问题标题】:In gnuplot, with "set datafile missing", how to ignore both "nan" and "-nan"?在 gnuplot 中,“缺少设置数据文件”,如何忽略“nan”和“-nan”?
【发布时间】:2013-09-14 02:45:18
【问题描述】:

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

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

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

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

【问题讨论】:

标签: gnuplot nan missing-data infinity


【解决方案1】:

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 过滤器以将任何非数值替换为 ?

这很好用,但只允许选择列,例如使用using 1:2,但不对列进行计算,例如using ($1*0.1):2。为此,您可以使用grep 过滤掉包含nan-inf 等的任何行,就像在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

【讨论】:

  • 这真是太好了,谢谢!您建议的 sed 过滤器仅用“?”替换第一个匹配项。这对我的目的来说真的很好,因为如果只有一个“?”,gnuplot 将忽略一行。在里面。现在有点跑题了:过滤器如何替换所有出现的相关字符串,例如用“inf -nan 2.43”过滤的应该是“? ? 2.43”
  • @user1069609 只需在 sed 模式中的 i 后面添加一个 g。我会更新答案。
  • 赞成成为 2018 年 6 月 Google 的第一选择,并允许我在一分钟内得到这个答案。这是一个很棒的数据库,因为有像您这样的贡献者。
猜你喜欢
  • 2017-11-24
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 2015-02-10
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
相关资源
最近更新 更多