在Gnuplot中删除空文件

时间:2013-10-19 02:05:08

标签: plot gnuplot skip is-empty isnullorempty

我正在使用gnuplot 4.6。另外,我知道一年多以前就提出了类似的问题here。答案需要编写一个小bash脚本。我想知道是否可以在gnuplot脚本中实现这一点,尤其是当gnuplot-4.6添加了许多很酷的功能时。我正在努力实现这样的目标:

set xrange[xL:xU]
set yrange[yL:yU]
plot "file1.dat" using 1:2 w l lt 1 lw 1 lc 3,\
"file2.dat" using 1:2 w l lt 1 lw 1 lc 3

我在循环中重复上述过程并xrange&每次迭代都会更新yrange个参数。另外,我将每次迭代的输出保存为一些图像文件。现在,file2.dat保证在所有迭代中都有一些点。但file1.dat并非如此。因此,我希望gnuplot跳过绘制file1.dat,以防它为空。请注意,如果file1.dat没有绘制任何积分,我的情况完全没问题。

这可以使用if语句轻松实现,前提是gnuplot中有一些命令可以检测文件是否没有点,而不会尝试绘制它。在这种情况下,上面的代码看起来像这样:

set xrange[xL:xU]
set yrange[yL:yU]
if ("file.dat" not empty){
plot "file1.dat" using 1:2 w l lt 1 lw 1 lc 3,\
    "file2.dat" using 1:2 w l lt 1 lw 1 lc 3
}else {
plot "file2.dat" using 1:2 w l lt 1 lw 1 lc 3
}

请帮助我制定上述'condition'声明的if

谢谢&干杯

阿比纳夫

1 个答案:

答案 0 :(得分:0)

我找不到任何仅使用gnuplot命令的黑客攻击。因此,我发布了一项工作,借助shell来查找file1.dat是否包含任何数据行。

gnuplot脚本文件中的条件如下所示:

if(system("awk '{x++}END{ print x}' file1.dat")>0){
    plot "file1.dat" using 1:2 w l lt 1 lw 1 lc 3,\
    "file2.dat" using 1:2 w l lt 1 lw 1 lc 3
}else{
    plot "file2.dat" using 1:2 w l lt 1 lw 1 lc 3
}

如果有人能给我一个gnuplot命令方法,我仍然会感激不尽。