Gnuplot svg терминал фоновое окно при использовании установленного соотношения - PullRequest
1 голос
/ 27 октября 2019

Я бы хотел включить график gnuplot в LaTeX с помощью \ includesvg.

В gnuplot я в основном просто делаю:

set xrange [0:5]
set yrange [0:3]
set size ratio 0.5
set grid
set terminal svg dynamic
set output "diag.svg"
plot 1/0

Это дает мне график, однако у svg естьпустое поле (несколько стилей ") на заднем плане, которое растягивается намного выше / ниже графика. По-видимому, это связано с линией" установите размерное соотношение 0,5 ".

Для того, чтобы LaTeX выполнил правильное масштабирование, мне нужноизбавьтесь от этого пустого поля и просто включите в него фактическую диаграмму. Как мне этого добиться (в gnuplot)?

Созданный файл SVG можно загрузить здесь

Ответы [ 2 ]

3 голосов
/ 27 октября 2019

Размер холста по умолчанию для svg-терминала gnuplot - 600x480, что составляет 1,25: 1,00. Команда set size ratio 0.5 запрашивает график с соотношением сторон 2: 1. Несоответствие между этими двумя приводит к пустому пространству над и под графиком. Если бы за границей графика не было меток осей и меток, идеальное соответствие размера установило бы соотношение сторон холста, равное соотношению графика, и установило бы поля равными нулю.

Однако, чтобы оставить место дляметки поля должны быть больше 0. Вы можете уменьшить их по сравнению с тем, что программа выбирает по умолчанию. Надлежащее количество пробелов, окружающих текст, субъективно, поэтому отрегулируйте его по вкусу. Вы можете начать с set margins 2,1,2,1, что оставляет немного больше места для меток слева и снизу границы графика. Это будет выглядеть примерно так:

  set term svg dynamic size 600,300
  set size ratio 0.5
  set margins 2,1,2,1
  plot ...

enter image description here

2 голосов
/ 27 октября 2019

При написании этого Итан уже ответил ...

Мое понимание этого следующее: Стандартный размер (или соотношение сторон) терминала 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)

enter image description here

...