GNUPLOT: как остановить «гистепс» от завершения до нуля (y = 0) в начальной и конечной точках? - PullRequest
1 голос
/ 04 ноября 2019

Я использую следующий скрипт для построения точек данных из файла "delete.dat"

set terminal jpeg
set output "delete_histeps.jpeg"

set title "with histeps"
plot "delete.dat" using 1:2 index 0 pt 7 ps 0.2 lc "black" notitle,\
"delete.dat" using 1:2 index 1 pt 7 ps 0.2 lc "red" notitle,\
"delete.dat" using 1:2 index 2 pt 7 ps 0.2 lc "green" notitle,\
"delete.dat" using 1:2 index 0 with histeps lc "black",\
"delete.dat" using 1:2 index 1 with histeps lc "red",\
"delete.dat" using 1:2 index 2 with histeps lc "green"

, а файл "delete.dat" -

1 2
3 4
5 6
7 8
9 10


-1 5
-2 3
-3 4
-4 2
-5 6


5 1
6 2
7 3
8 4
9 5
10 4
11 3
12 12

Но началои конечный шаг падает до нуля, чего я не хочу. Хотя для команды step и fsteps шаги начинаются (заканчиваются) в первой (последней) точке данных, не опускаясь доноль (у = 0). Можете ли вы предложить, что работает как гистепс (который сохраняет точки данных в середине шагов), но не заканчивается на ноль (как шагов или шагов ). Я также прилагаю фотографии.

With histeps

With steps

With fsteps

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Если ваши точки данных равноудалены (как те, что вы указали), возможен и альтернативный хак, если объединить fsteps и steps и сместить значение x на половину расстояния от точки к точке:

plot "delete.dat" i 0 pt 7 ps 2 lc "black" not, \
'' i 1 pt 7 ps 2 lc "red" not, \
'' i 2 pt 7 ps 2 lc "green" not, \
'' u ($1-1.0):2 i 0 w steps lc "black", '' u ($1+1.0):2 i 0 w fsteps lc "black" not, \
'' u ($1+0.5):2 i 1 w steps lc "red", '' u ($1-0.5):2 i 1 w fsteps lc "red" not, \
'' u ($1-0.5):2 i 2 w steps lc "green", '' u ($1+0.5):2 i 2 w fsteps lc "green" not

Хитрость в том, что одна steps или fsteps пропустит либо последнюю, либо первую точку, и линия будет заканчиваться в воздухе, поэтому оба должны быть нанесены сверхудруг друга с одинаковым стилем прорисовки.

Нужно позаботиться о правильном знаке: если x положительный, steps получит пониженную передачу и fsteps получит повышающую передачу;и наоборот, если x отрицательно.

Мой ответ определенно не такой «надежный», как у теожа, но, возможно, легче понять.

0 голосов
/ 04 ноября 2019

Ну вот как были определены hispteps, steps и fsteps. Затем вы должны создать свои собственные шаги. Решение может быть следующим:

Код: (улучшенная версия)

### steps like histeps but not dropping to zero
reset session
set colorsequence classic

$Data <<EOD
1 2
3 4
5 6
7 8
9 10


-1 5
-2 3
-3 4
-4 2
-5 6


5 1
6 2
7 3
8 4
9 5
10 4
11 3
12 12
EOD

set table $myStep
    do for [i=0:2] {
        plot $Data u ($0==0?(x1=x2=$1):(x1=x2,x2=$1),(c=$0,x1+x2)/2.):2 index i w table
        plot $Data u 1:2 every ::c index i w table     # add last value
        plot '+' u ("") every ::::1 w table            # add two empty lines
    }
unset table

set key top left
plot for [i=0:2] $myStep u 1:2 index i w step lc i lw 3 notitle,\
     for [i=0:2] $Data u 1:2 index i w p pt 7 lc i notitle, \
### end of code

Результат:

enter image description here

...