覆盖Gnuplot多图布局

时间:2019-01-12 05:35:33

标签: gnuplot

根据文档,具有布局的多图可以具有其自己的自定义原点的图,该图将覆盖其布局位置: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 :(得分:1)

必须承认,这可能有点乏味,另一方面,直接玩边距可以给您一定的灵活性。下面的脚本基本上只首先计算各个图的屏幕坐标中的宽度和高度,然后通过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