gnuplot - 覆盖 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)
现在第二行的中间,而不是在第二行的第一个单元格中?
我明白我可以简单地关闭布局并手动设置每个绘图的大小/原点以获得我想要的;但是,我正在寻找一种允许我处理布局规范的解决方案,因为我也在使用边距,除非绝对有必要获得我正在寻找的效果,否则我宁愿不使用不同的代码进行定义。
解决方案
必须承认这可能有点乏味,另一方面,直接使用边距为您提供了一定的灵活性。下面的脚本基本上只是首先计算各个图的屏幕坐标中的宽度和高度,然后通过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)
推荐阅读
- excel - 后期绑定与早期绑定
- python - c = a + b; 如何使 c 始终反映对 a 或 b 所做的任何更改?
- http-post - 使用 http POST 向服务器发送字符串
- java - Groovy 字节数组被隐式转换为 ArrayList
- jquery - 在悬停时使用画布交叉淡入淡出背景图像
- java - 如何仅根据 Guava 中外部存储的结果缓存一些活动数据?
- gdb - GDB:如何限制便利变量的范围
- asp.net-core - 向 OData 控制器添加函数或参数
- python - 在使用 Python2.7 和 cx_Freeze 创建可执行文件时,我收到以下与 Python.Runtime.dll 相关的错误“
- google-app-engine - Google App Engine 中的实际应用二进制限制是多少?