首页 > 解决方案 > 覆盖 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)现在第二行的中间,而不是在第二行的第一个单元格中?

这是我得到的:

这是我想要的: 在此处输入图像描述

我明白我可以简单地关闭布局并手动设置每个绘图的大小/原点以获得我想要的;但是,我正在寻找一种允许我处理布局规范的解决方案,因为我也在使用边距,除非绝对有必要获得我正在寻找的效果,否则我宁愿不使用不同的代码进行定义。

标签: gnuplot

解决方案


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

这会产生: 在此处输入图像描述


推荐阅读