Gnuplot: заполнить область, ограниченную кривыми влево / вправо? - PullRequest
0 голосов
/ 26 августа 2018

У меня есть набор данных, который определяет две кривые, и я хочу заполнить область между ними.Однако, вопреки стандартной ситуации, абсцисса должна быть нанесена на оси по вертикали , а ординаты - на горизонтальной;абсцисса указывает глубину, это распространенный формат построения графиков в геофизике.Другими словами, я хочу что-то вроде

 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 голосов
/ 28 августа 2018

Это совершенно другое решение, использующее стиль 3D-сюжета "с нулем".Для этого вам понадобится текущий gnuplot (версия 5.2).Стиль графика на самом деле не был разработан для этого, поэтому есть некоторые трудности (например, x метки невидимы, потому что нарисованы перпендикулярно плоскости графика, все метки метки требуют смещения для удобства чтения).

#
# [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

0 голосов
/ 17 мая 2019

Простой способ - определить замкнутую линию и заполнить ее.Для этого вы берете столбец 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

0 голосов
/ 27 августа 2018

Если есть какое-то значение 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

...