在 gnuplot 中,“缺少设置数据文件”,如何忽略“nan”和“-nan”?

Posted

技术标签:

【中文标题】在 gnuplot 中,“缺少设置数据文件”,如何忽略“nan”和“-nan”?【英文标题】:In gnuplot, with "set datafile missing", how to ignore both "nan" and "-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,或者甚至是某种正则表达式来排除任何可以想象的非数字数据?

【问题讨论】:

使用 grep 和 gnuplot commnad ***.com/questions/7600048/… 参考这个问题 支持成为 2018 年 6 月 Google 排名第一的人 【参考方案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 的第一选择,并允许我在一分钟内得到这个答案。这是一个很棒的数据库,因为有像您这样的贡献者。

以上是关于在 gnuplot 中,“缺少设置数据文件”,如何忽略“nan”和“-nan”?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中使用 GNUplot 绘制图形

如何在 Gnuplot 中绘制噪声值的平均值

如何在脚本中读取不规则编号的数据文件以制作 gnuplot 图像?

Gnuplot - 如何更改键背景的不透明度?

如何在 gnuplot 中使用带有“with”表示法的动态变量名称?

如何在Gnuplot 5中制作GIF动画