在 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
不能使用正则表达式,但您可以使用任何程序在绘图之前过滤数据,并用一个字符替换正则表达式,例如?
设置为标记丢失的数据点。
这是一个完成您最初要求的示例:过滤-nan
、inf
等。为了测试,我使用了以下数据文件:
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”?的主要内容,如果未能解决你的问题,请参考以下文章
如何在脚本中读取不规则编号的数据文件以制作 gnuplot 图像?