Gnuplot:填充区域是否由左/右曲线界定?

时间:2018-08-26 17:10:32

标签: 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.    -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中有可能吗?

托马斯

3 个答案:

答案 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)

那么仍然有可能通过堆叠来构造图 分段部分。

enter image description here

答案 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

enter image description here

答案 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

结果:

enter image description here