Переопределение макета Gnuplot - PullRequest
0 голосов
/ 12 января 2019

Согласно документам, мультиплот с макетом может иметь график с собственным настраиваемым источником, который переопределяет местоположение макета: http://gnuplot.sourceforge.net/docs_4.2/node203.html

Я пытаюсь сделать это с помощью следующего примера кода; тем не менее, я не могу заставить третий график выровняться в середине второго ряда.

set multiplot layout 2,2 rowsfirst margins 0.1,0.93,0.2,0.93 spacing 0.1,0.1
plot sin(x)
plot cos(x)
plot tan(x)

Как заставить tan(x) появляться в середине второго ряда, а не в первой ячейке второго ряда?

Вот что я получаю:

Вот что я хочу: enter image description here

Я понимаю, что могу просто отключить макет и вручную установить размер / происхождение каждого графика, чтобы получить то, что я хочу; Тем не менее, я ищу решение, которое позволило бы мне работать со спецификацией макета, поскольку я также работаю с запасом, который я бы предпочел не определять с помощью другого кода, за исключением случаев, когда это абсолютно необходимо для получения эффекта, который я ищу.

1 Ответ

0 голосов
/ 12 января 2019

Надо признать, что это, вероятно, немного утомительно, с другой стороны, прямая игра с полями дает вам определенную гибкость. Сценарий ниже в основном просто сначала вычисляет ширину (ы) и высоту (и) в экранных координатах отдельных графиков, а затем размещает их отдельно с помощью команды set margin:

BORDER_L = 0.10
BORDER_R = 0.07
BORDER_B = 0.20
BORDER_T = 0.07

SPACING_X = 0.10
SPACING_Y = 0.10

NUM_ROWS = 2
NUM_COLS = 2

PLT_W = (1 - BORDER_L - BORDER_R - (NUM_COLS-1)*SPACING_X)/NUM_COLS
PLT_H = (1 - BORDER_B - BORDER_T - (NUM_ROWS-1)*SPACING_Y)/NUM_ROWS

#set multiplot layout 2,2 rowsfirst margins BORDER_L,1-BORDER_R,BORDER_B,1-BORDER_T spacing SPACING_X,SPACING_Y

set multiplot

set tmargin at screen 1 - BORDER_T
set bmargin at screen 1 - BORDER_T - PLT_H
set lmargin at screen BORDER_L
set rmargin at screen BORDER_L + PLT_W

plot sin(x)

set tmargin at screen 1 - BORDER_T
set bmargin at screen 1 - BORDER_T - PLT_H
set lmargin at screen 1 - BORDER_R - PLT_W
set rmargin at screen 1 - BORDER_R

plot cos(x)

set tmargin at screen 1 - BORDER_T - PLT_H - SPACING_Y
set bmargin at screen BORDER_B 
set lmargin at screen (1 - PLT_W)/2
set rmargin at screen 1 - (1 - PLT_W)/2

plot tan(x)

Затем получается: enter image description here

...