如何将曲线填充到特定值,同时与线 gnuplot

问题描述

我只想绘制填充曲线,直到第一列上的值小于零。我应该怎么做?也许每次绘制两条不同范围的不同线?

我的代码是:

 p "data.txt"  ($1 <=0  ? $2 : 1/0) w filledcurves,'' ($1 <=0    ? $2 : 1/0) w filledcurves,\
 ...

但是这样x轴上的值是错误的,并且曲线以错误的奇怪方式填充:

enter image description here


以另一种方式,x 轴是正确的,而曲线仍然以奇怪的方式填充:

plot 'data.txt' u 1:($1<=0?$2:1/0)

enter image description here

那些是 gnuplot 中的错误吗?

虽然我会是这样,但只填充到零:

enter image description here

还有一种方法可以和线同时绘制,并选择线型?

解决方法

有几个问题:

1 - 您应该使用 usingu,例如:

plot "data.txt" u ($1 <=0  ? $2 : 1/0)

2 - 在这种形式中,您绘制第 2 列(或不绘制;取决于第 1 列)与第 0 列((几乎)等于行号)的关系。要检查此效果,请尝试查看:

plot "data.txt" u 2

3 - 答案:正确的语法如下:

plot 'data.txt' u ($1<=0?$1:1/0):2    

plot 'data.txt' u 1:($1<=0?$2:1/0) 

这取决于您实际上想要绘制什么。它们之间的区别在于,第一个将图的 xrange 设置为 0,而第二个显示更宽的 xrange(最多为数据的 x_max)。但是,在您的情况下,您可以同时使用它们。 (或者你可以混合它们。)例如:

plot 'data.txt' u 1:($1<=40?$2:1/0) w filledcurves y=0,'' u  1:($1>40?$2:1/0) w l lc 1

example

您的绘图的问题在于,使用带有 2 列数据集的“裸”filledcurves,默认选项是 closed,这会将数据集威胁为封闭多边形。