При написании этого Итан уже ответил ...
Мое понимание этого следующее: Стандартный размер (или соотношение сторон) терминала svg составляет 600x480. Если вы скажете gnuplot set size ratio 0.5
, график будет в этом соотношении. Так что, скорее всего, у вас будет верхний и нижний поля, которые в вашем случае вам на самом деле не нужны.
Одним из решений было бы адаптировать размер холста соответственно. Это можно сделать с помощью переменных gnuplot GPVAL_TERM_XSIZE
, GPVAL_TERM_YSIZE
, GPVAL_TERM_YMAX
и GPVAL_TERM_YMIN
. Однако вы получаете действительные значения только после построения.
- Итак, сначала вам нужно построить график, чтобы получить размер терминала (по какой-то причине он умножается на 10, нене спрашивай меня почему). Это делается без установки соотношения размеров, чтобы получить маржу.
- Затем вы устанавливаете соотношение размеров и повторное размещение, чтобы получить пространство, действительно необходимое в направлении y.
- А затем вы соответственно устанавливаете размер терминала и строите график в последний раз.
Не очень элегантная процедура, но, по крайней мере, кажется, что она работает.
Код:
### appropriate scaling of svg background box when using "size ratio"
reset session
set term svg dynamic
myOutput = "tbSVGBackBox.svg"
set output myOutput
set xrange [0:5]
set yrange [0:3]
set grid
plot x # plot to get the margins via GPVAL_...
set output
mySizeX = GPVAL_TERM_XSIZE/10
mySizeY = GPVAL_TERM_YSIZE/10
myMarginTop = mySizeY - GPVAL_TERM_YMAX
myMarginBottom = GPVAL_TERM_YMIN
myRatio = 0.5
set size ratio myRatio
set output myOutput
replot
set output
mySizeYNew = GPVAL_TERM_YMAX - GPVAL_TERM_YMIN + myMarginTop + myMarginBottom
set term svg size mySizeX, mySizeYNew dynamic
set output myOutput
replot
set output
### end of code
Результат: (кадр отображается в Inkscape)