GNUPLOT: Как настроить автоматический размер бумаги, сохраняя при этом правильное соотношение сторон?

Я использую C++ для потоковой передачи сценариев Gnuplot. Но меня очень раздражает соотношение сторон и размер бумаги. У кого-нибудь есть хороший способ:

(1) Соблюдайте правильное соотношение сторон, длина 1 равна 1, 2 равна 2 на графике. Я обнаружил, что соотношение сторон зависит от размера бумаги!!!

(2) Бумага с нулевыми полями, размер бумаги будет масштабироваться автоматически. Я обнаружил, что цифра eps всегда имеет большие поля.

set terminal postscript eps enhanced color font 'Helvetica,2000' size 640,480
set output 'grid.eps'
set size 1, 1
set hidden3d
unset key
unset tics
unset border
set view 0,0,1,1
set xrange [0:3]
set yrange [0:6]
set zrange [0:1]
set title 'grid test'
splot 'grid.dat' using 1:2:3 with lines lt 2 lc rgb '#100000'

grid.dat файл:

0 0 0
1 0 0
2 0 0
3 0 0

0 2 0
1 2 0
2 2 0
3 2 0

0 4 0
1 4 0
2 4 0
3 4 0

0 6 0
1 6 0
2 6 0
3 6 0

Говоря о правильном соотношении сторон, я имею в виду, что я хочу, чтобы график выглядел именно как прямоугольная сетка 2: 1, а не как квадрат или что-то еще. Я не хочу, чтобы фигура была как-то растянута.


person Daniel    schedule 20.05.2013    source источник


Ответы (2)


Если я правильно вас понял, вы хотите установить соотношение сторон вашего сюжета. Для этого вы хотите использовать что-то вроде:

set size ratio ASPECT_RATIO

это сделает так, что длина оси Y, деленная на длину оси X (в графических единицах), равна ASPECT_RATIO. Если вы хотите, чтобы соотношение определялось в единицах измерения, то вы должны использовать отрицательное число для ASPECT_RATIO.

person mgilson    schedule 20.05.2013

Вот в чем хитрость, предположим, у нас есть следующий универсальный скрипт:

set terminal postscript eps enhanced color font 'Helvetica,20' size Lx,Ly
set xrange [XMIN:XMAX]
set yrange [YMIN:YMAX]

Во-первых, установите XMIN и XMAX и YMIN и YMAX на минимум и максимум графиков.

Затем установите Lx, скажем пусть Lx = 100, тогда Ly должно быть установлено как floor(100*(YMAX-YMIN)/(XMAX-XMIN))).

После этого можно использовать какой-нибудь сценарий оболочки для удаления полей.

person Daniel    schedule 22.05.2013