我有一个定义两个曲线的数据集,我想填充它们之间的区域。但是,与标准情况相反,横坐标绘制在垂直轴上,纵坐标绘制在水平轴上。横坐标表示深度,这是地球物理学中常见的绘图格式。换句话说,我想要类似
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中有可能吗?
托马斯
答案 0 :(得分:1)
如果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)
那么仍然有可能通过堆叠来构造图 分段部分。
答案 1 :(得分:1)
这是使用“带有zerror”的3D绘图样式的完全不同的解决方案。 为此,您将需要当前的gnuplot(5.2版)。绘图样式的确不是为此设计的,因此存在一些困难(例如x tic标记不可见,因为它是垂直于绘图平面绘制的,所有tic标记都需要偏移以提高可读性)。
#
# [mis]use 3D plot style "with zerror" to create a plot of the xz
# plane with area fill between two sets of data points with
# equal coordinates on the vertical axis (x) but contrasting
# values on the horizontal axis (z).
#
set view 270, 0
set view azimuth -90
set xyplane at 0
unset ytics
set ztics offset 4, -2 out
set xtics offset 4
splot 's.dat' using 1:(0):(0.5*($2+$3)):2:3 with zerror notitle
答案 2 :(得分:0)
一种简单的方法是定义一条闭合线并填充它。为此,请选择第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
结果: