Gnuplot:填充由左/右曲线限定的区域?

Gnuplot:填充由左/右曲线限定的区域?,gnuplot,Gnuplot,我有一个定义两条曲线的数据集,我想填充它们之间的区域。然而,与标准情况相反,横坐标绘制在纵轴上,纵坐标绘制在水平轴上;横坐标表示深度,这是地球物理学中常见的绘图格式。换句话说,我想要像这样的东西 plot 's.dat' u 1:2:3 w filledcurves 但使用交换的轴,以使填充区域不是在顶部和底部,而是在左侧和右侧由曲线限定,如中所示 plot 's.dat' u 2:1,'s.dat' u 3:1 我的数据集如下所示: 0. -1.776 -0.880 160.

我有一个定义两条曲线的数据集,我想填充它们之间的区域。然而,与标准情况相反,横坐标绘制在纵轴上,纵坐标绘制在水平轴上;横坐标表示深度,这是地球物理学中常见的绘图格式。换句话说,我想要像这样的东西

 plot 's.dat' u 1:2:3 w filledcurves
但使用交换的轴,以使填充区域不是在顶部和底部,而是在左侧和右侧由曲线限定,如中所示

plot 's.dat' u 2:1,'s.dat' u 3:1
我的数据集如下所示:

0.      -1.776  -0.880
160.    -1.775  -0.882
160.    -1.692  -0.799
320.    -1.692  -0.800
320.    -1.531  -0.634
480.    -1.534  -0.637
480.    -1.286  -0.394
这在Gnuplot中可能吗


托马斯

如果x的某个值保证位于两条曲线之间,则可以绘制两半。对于您显示的数据,x=-1将是一个合适的值,而plot命令将是:

plot 's.dat' u 2:1 with filledcurve x=-1 lt 3, \
     's.dat' u 3:1 with filledcurve x=-1 lt 3
如果对恒定中间x值的要求只能是 满意的分段,例如

 x=-1 for (0<y<500), x=0 for (500<y<1000)

x=-1 for(0这是一个完全不同的解决方案,使用3D打印样式“带zerror”。
为此,您需要当前的gnuplot(版本5.2)。打印样式实际上并不是为此而设计的,因此存在一些困难(例如,x tic标记不可见,因为绘制时垂直于打印平面,所有tic标签都需要偏移以确保可读性)


一个简单的方法是定义一条闭合线并填充它。为此,您需要第2列并添加反向的第3列。为此,您可能需要gnuplot>=5.2

代码:

### fill between vertical curves
reset session

$Data <<EOD
0.      -1.776  -0.880
160.    -1.775  -0.882
160.    -1.692  -0.799
320.    -1.692  -0.800
320.    -1.531  -0.634
480.    -1.534  -0.637
480.    -1.286  -0.394
EOD

set print $Outline
do for [i=1:|$Data|] {
    print sprintf("%s %s", word($Data[i],2), word($Data[i],1))
}
do for [i=|$Data|:1:-1] {
    print sprintf("%s %s", word($Data[i],3), word($Data[i],1))
}
set print

plot $Outline w filledcurve lc rgb "green"
### end of code
垂直曲线之间的填充 重置会话
$Data是的,这可能是一种尝试的方式,但在Gnuplot中似乎没有“适当”的方法来实现这一点(即,通过选项)。不幸的是,我发布的只是整个数据集的一个子集(并且表现不太好),因此它会相当麻烦。无论如何,谢谢。这可能是有帮助的:
### fill between vertical curves
reset session

$Data <<EOD
0.      -1.776  -0.880
160.    -1.775  -0.882
160.    -1.692  -0.799
320.    -1.692  -0.800
320.    -1.531  -0.634
480.    -1.534  -0.637
480.    -1.286  -0.394
EOD

set print $Outline
do for [i=1:|$Data|] {
    print sprintf("%s %s", word($Data[i],2), word($Data[i],1))
}
do for [i=|$Data|:1:-1] {
    print sprintf("%s %s", word($Data[i],3), word($Data[i],1))
}
set print

plot $Outline w filledcurve lc rgb "green"
### end of code