Разбить ось Y на три части в gnuplot - PullRequest
1 голос
/ 06 мая 2019

Я пытаюсь построить некоторые данные с огромным зазором по оси Y, которые я хочу исключить из графика.

шумы: noises

Я нашел это руководство по разбивке графика на две части, которое прекрасно работает для меня.

reset
unset key
bm = 0.15
lm = 0.12
rm = 0.95
gap = 0.03
size = 0.75
y1 = 9.25e+06; y2 = 9.35e+06; y3 = 1.24e+07; y4 = 1.25e+07

set multiplot
set xlabel 'Number of Iterations'
set border 1+2+8
set xtics nomirror
set ytics nomirror
set lmargin at screen lm
set rmargin at screen rm
set bmargin at screen bm
set tmargin at screen bm + size * (abs(y2-y1) / (abs(y2-y1) + abs(y4-y3) ) )

set yrange [y1:y2]
plot 'upquValues.dat' title 'upper quartile', 'MedianValues.dat' using 1 title 'median value', 'loquValues.dat' title 'lower quartile',  'MeanValues.dat' using 1 title 'mean value';

unset xtics
unset xlabel
set border 2+4+8
set bmargin at screen bm + size * (abs(y2-y1) / (abs(y2-y1) + abs(y4-y3) ) ) + gap
set tmargin at screen bm + size + gap
set yrange [y3:y4]

set label 'Runtime [ns]' at screen 0.03, bm + 0.5 * (size + gap) offset 0,-strlen("PRuntime [ns]")/4.0 rotate by 90

set arrow from screen lm - gap / 4.0, bm + size * (abs(y2-y1) / (abs(y2-y1)+abs(y4-y3) ) ) - gap / 4.0 to screen \
lm + gap / 4.0, bm + size * (abs(y2-y1) / (abs(y2-y1) + abs(y4-y3) ) ) + gap / 4.0 nohead

set arrow from screen lm - gap / 4.0, bm + size * (abs(y2-y1) / (abs(y2-y1)+abs(y4-y3) ) ) - gap / 4.0  + gap to screen \
lm + gap / 4.0, bm + size * (abs(y2-y1) / (abs(y2-y1) + abs(y4-y3) ) ) + gap / 4.0 + gap nohead

set arrow from screen rm - gap / 4.0, bm + size * (abs(y2-y1) / (abs(y2-y1)+abs(y4-y3) ) ) - gap / 4.0 to screen \
rm + gap / 4.0, bm + size * (abs(y2-y1) / (abs(y2-y1) + abs(y4-y3) ) ) + gap / 4.0 nohead

set arrow from screen rm - gap / 4.0, bm + size * (abs(y2-y1) / (abs(y2-y1)+abs(y4-y3) ) ) - gap / 4.0  + gap to screen \
rm + gap / 4.0, bm + size * (abs(y2-y1) / (abs(y2-y1) + abs(y4-y3) ) ) + gap / 4.0 + gap nohead

plot 'upquValues.dat' title 'upper quartile', 'MedianValues.dat' using 1 title 'median value', 'loquValues.dat' title 'lower quartile',  'MeanValues.dat' using 1 title 'mean value';

unset multiplot

noises_break noises_break

Как я могу разделить его на три части сейчас? Также теряются легенда и заголовок графика, который я также хотел бы исправить.

Моя следующая проблема включает сохранение графика в формате png или postscript. Когда я впервые использую set term png; set output 'img.png', я генерирую пустой файл img.png. Когда я сначала строю график, а потом устанавливаю термин и использую replot, печатается только верхний график.

break

1 Ответ

2 голосов
/ 06 мая 2019

Простой способ "имитировать" два разрыва осей - это использовать set multiplot layout 3,1 и соответственно фиксировать y-диапазоны и заново представлять ваши данные.

Код:

### two axes breaks
reset session
set colorsequence classic
set key left
set multiplot layout 3,1

set lmargin 5
unset xtics
set border 14
set ytic 1
set yrange [8:10]
plot x, sin(x)*10, -0.3*x**2+10

unset key
set border 10
set yrange [-2:2]
replot

set border 11
set xtics nomirror
set yrange [-10:-8]
replot

unset multiplot
### end of code

Результат:

enter image description here

На ваш другой вопрос: если я использую png или pngcairo или постскриптумный терминал,Я делаю:

set term pngcairo
set output 'img.png'
plot x
set output

Если пропустить последний set output, я получу файл 'img.png' с 0 байтами.

...