Gnuplot 使用填充曲线的奇异插值

Gnuplot 使用填充曲线的奇异插值,gnuplot,Gnuplot,我有这样一个数据文件: 1 1 2 2 2 3 3 4 nan 4 5 6 我想用以下方法绘制它: plot "bla" u 1:2:3 w filledcurves, "" u 1:2 w lp, "" u 1:3 w lp 问题是,第一部分完全忽略了第三行,即使nan值只有3美元。即使我有一个2美元的值(4),它也会插值并跳过它 如何使其不忽略该值 我可以通过将nan替换为本例中应该存在的值-(3+6)/2来解决问题,然后它也将绘制4。这有两个问题-我必须编写一个脚本来查找文件中的NaN

我有这样一个数据文件:

1 1 2
2 2 3
3 4 nan
4 5 6
我想用以下方法绘制它:

plot "bla" u 1:2:3 w filledcurves, "" u 1:2 w lp, "" u 1:3 w lp
问题是,第一部分完全忽略了第三行,即使nan值只有3美元。即使我有一个2美元的值(4),它也会插值并跳过它

如何使其不忽略该值


我可以通过将nan替换为本例中应该存在的值-(3+6)/2来解决问题,然后它也将绘制4。这有两个问题-我必须编写一个脚本来查找文件中的NaN,当我使用
w lp
时,它也会绘制一个点,好像那里有一个值,但是没有。你要求gnuplot使用它来做一些它不打算做的事情。幸运的是,有一个有点黑客的解决方案。您需要使用填充曲线的2列版本,该版本考虑数据点以形成闭合回路。在本例中,您希望绘制第1列和第2列中的内容,然后绘制第3列和第1列中的内容(顺序相反)。e、 g:

如果数据文件如下所示,则可以将其绘制为:

plot 'datafile' u 1:2 w filledcurves
现在我很确定您实际上不想重新生成数据文件,因此最简单的方法是使用unix工具为您执行此操作:

plot "< sed 'x;1!H;$!d;x' test.dat | awk '{print $1,$3}' | cat test.dat -" u 1:2 w filledcurves
plot“

这应该行得通。请注意,如果您已经安装了sed,那么丑陋的
sed
命令可以替换为
tac

实际上,我要求gnuplot使用它来完成它的设计目的。填充曲线中的3列应填充两条曲线之间的区域。从算法的角度来看,因为在这一点上它没有顶部和底部,所以它不应该绘制任何东西,但从用户的角度来看,这并不重要。仔细想想,这更多的是gnuplot中的一个bug或不存在的特性。不过,您的变通方法很好。@Michael——不,这绝对不是它设计的目的
using
旨在一次解析一条记录(在您的示例中,第1、2和3列)。如果该记录中的任何元素不可读,gnuplot将丢弃整个记录。对于大多数打印类型,这是非常有用的行为。(例如,考虑绘制一个3D散点图)如果你知道“X”和“Y”,而不是“Z”,你仍然无法绘制点。像这样的情况需要专门处理,可能会使代码库更难管理。
plot "< sed 'x;1!H;$!d;x' test.dat | awk '{print $1,$3}' | cat test.dat -" u 1:2 w filledcurves