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