matlab - 正确对齐平铺布局中子组的标签

标签 matlab layout label alignment subplot

我想使用平铺布局在图中放置 5 个图,顶部的 2x2 图,然后底部的图跨越两列。应该有两组轴标签:一组用于 2x2 图,另一组用于底部图。我的 MWE 是

x = linspace(-2,2,100);
y1 = sin(x);
y2 = cos(x);
y3 = sin(x).*cos(2*x);
y4 = sin(2*x).*cos(x);
y5 = y3 + y4;

figure('PaperUnits', 'inches', 'PaperSize', [4 6], 'PaperPosition', [0 0 4 6]);
t = tiledlayout(3,2,'TileSpacing','compact','Padding','compact');

nexttile; plot(x,y1); title('y_1');
nexttile; plot(x,y2); title('y_2');
nexttile; plot(x,y3); title('y_3');
nexttile; plot(x,y4); title('y_4');

xlabel(t,'time t_\alpha')
ylabel(t,'amplitude \alpha')

nexttile([1 2]); plot(x,y5); title('y_5');

xlabel('time t_\beta')
ylabel('amplitude \beta')

saveas(gcf,'myfig.jpg')

这给了我下图:

enter image description here

我希望 2x2 绘图的amplitude\alpha ylabel 和time t_alpha xlabel 正确对齐(如我的红色注释所示)。有办法做到这一点吗?

我正在使用 MATLAB R2020a。请注意,tiledlayout 函数是在 R2019b 中引入的。

最佳答案

可以通过我在评论中提到的方法(使用“嵌套”tilelayout)来实现您想要的近似值。使其工作所需的步骤是:

  1. 创建外部垂直布局。
  2. 通过询问 2×1 nexttile 保留嵌套 tiledlayout 的前两行,隐藏结果轴,并创建 uipanel在它的位置。调用 uipanel 是必要的,因为 parent of a tiledlayout不能是另一个tiledlayout,但它可以是一个Panel
  3. 在适当的面板中绘制所有内容,并相应地应用标签。
x = linspace(-2,2,100);
y1 = sin(x);
y2 = cos(x);
y3 = sin(x).*cos(2*x);
y4 = sin(2*x).*cos(x);
y5 = y3 + y4;

hF = figure('PaperUnits', 'inches', 'PaperSize', [4 6], 'PaperPosition', [0 0 4 6]);
tOut = tiledlayout(hF,3,1);
hAx = nexttile(tOut, [2,1]); hAx.Visible = 'off';
hP = uipanel(hF, 'Position', hAx.OuterPosition, 'BorderWidth', 0);
tIn = tiledlayout(hP,2,2,'TileSpacing','compact','Padding','compact');

nexttile(tIn); plot(x,y1); title('y_1');
nexttile(tIn); plot(x,y2); title('y_2');
nexttile(tIn); plot(x,y3); title('y_3');
nexttile(tIn); plot(x,y4); title('y_4');

xlabel(tIn,'time t_\alpha')
ylabel(tIn,'amplitude \alpha')

hAx = nexttile(tOut); plot(x,y5); title('y_5');

xlabel(hAx, 'time t_\beta')
ylabel(hAx, 'amplitude \beta')

结果:

enter image description here


从这里您可以尝试调整各个 GUI 元素(布局、轴、面板)以获得更接近您想要的结果。

我建议的完全不同的路线是从您的代码开始,并使用 annotation 添加前 4 个图的标签。函数(而不是 xlabelylabel)。

关于matlab - 正确对齐平铺布局中子组的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66221891/

相关文章:

Python 相当于 MATLAB 的 Legendre 函数

linux - 您将如何在 WSL2 上运行的 ubuntu 中正确安装 MATLAB?

matlab - 多次使用 Polyval 函数的性能改进

matlab - 在 Matlab 中设计简单的带通/带阻滤波器

html - 导航栏下方的网站段落框

python - 在 matplotlib 中设置轴标签字体大小的简洁方法

r - 如何更改r中的树状图标签

css - webkit 空 td 为 1px

Android 微调器布局

MATLAB:用 imshow 标记轴