10

根据各种因素,我可能没有 1 个或多个数据文件,在预定义的 gnuplot 绘图指令中引用,这些文件不存在。在这种情况下,我会收到“警告:跳过不可读的文件”,这会取消其余的说明。

有什么办法可以让 gnuplot 跳过任何丢失的数据文件并绘制所有现有的数据文件?

4

2 回答 2

11

这是一个没有帮助脚本的类似解决方案

file_exists(file) = system("[ -f '".file."' ] && echo '1' || echo '0'") + 0
if ( file_exists("mydatafile") ) plot "mydatafile" u 1:2 ...

部分是将+ 0结果从字符串转换为整数,这样你也可以使用否定

if ( ! file_exists("mydatafile") ) print "mydatafile not found."
于 2014-08-20T02:19:45.543 回答
2

不幸的是,如果没有简单的帮助脚本,我似乎无法弄清楚如何做到这一点。这是我使用“助手”的解决方案:

#!/bin/bash
#script ismissing.sh.  prints 1 if the file is missing, 0 if it exists.
test -e $1
echo $?

现在,使其可执行:

chmod +x ismissing.sh

现在在您的 gnuplot 脚本中,您可以创建一个简单的函数:

is_missing(x)=system("/path/to/ismissing.sh ".x)

然后你保护你的情节命令如下:

if (! is_missing("mydatafile") ) plot "mydatafile" u 1:2 ...

编辑

看来 gnuplot 并没有因为您的文件丢失而窒息 - 当 gnuplot 尝试根据丢失的数据设置绘图范围时出现实际问题(我假设您正在自动缩放轴范围)。另一种解决方案是显式设置轴范围:

set xrange [-10:10]
set yrange [-1:1]
plot "does_not_exist" u 1:2
plot sin(x)  #still plots
于 2012-07-23T12:27:17.230 回答