plot - Matlab:堆叠各种地 block

标签 plot matlab

我对下图有疑问:

enter image description here 本质上,我们这里有两个具有相同 x 轴的子图。我想 现在为了节省空间,而不是有两个带有两个 x 轴标签的子图,我会 喜欢消除它们之间的空间并将它们堆叠在一起。

有什么简单的方法可以做到这一点吗?

非常感谢! 帕特里克

%% Data
t  = 0:100;
f1 = 0.3;
f2 = 0.07;
u1 = sin(f1*t);   cu1 = 'r'; %red
u2 = cos(f2*t);   cu2 = 'b'; %blue
v1 = 5*u1.^2;     cv1 = 'm'; %magenta
v2 = 5*u2.^2;     cv2 = 'c'; %cyan

figure;
h(1) = subplot(2,1,1); % upper plot
plot(t,u1,'Color',cu1,'DisplayName','u1'); hold on;
plot(t,u2,'Color',cu2,'DisplayName','u2'); hold off;

xlabel('Time t [s]');
ylabel('u [some unit]');
legend(gca,'show');

h(2) = subplot(2,1,2); % lower plot
plot(t,v1,'Color',cv1,'DisplayName','v1'); hold on;
plot(t,v2,'Color',cv2,'DisplayName','v2'); hold off;

xlabel('Time t [s]');
ylabel('v [some unit^2]');
legend('show');

linkaxes(h,'x'); % link the axes in x direction (just for convenience)

最佳答案

去掉上图的xticks:

set(h(1),'xticklabel',[]);

并删除 xlabel(删除或注释代码中的那一行)

现在通过改变它们的位置使两者靠得更近:

pos=get(h,'position');
bottom=pos{2}(2);
top=pos{1}(2)+pos{1}(4);
plotspace=top-bottom;
pos{2}(4)=plotspace/2;
pos{1}(4)=plotspace/2;
pos{1}(2)=bottom+plotspace/2;

set(h(1),'position',pos{1});
set(h(2),'position',pos{2});

然后你会得到

enter image description here

y 轴标签开始重叠,因此您可能还想调整这些标签

set(h(1),'ytick',[-0.5 0 0.5]);

例如,或将一个 y 轴放在右侧:

set(h(2),'YAxisLocation','right')

关于plot - Matlab:堆叠各种地 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11757987/

相关文章:

matlab - Matlab 中的 clc 和 clear all 有什么区别?

java - Java 中的 2D 绘图

matlab - 有没有办法在 Matlab 中集成函数的对数 f(x) 而无需定义例如 l = log(f(x)?

matlab - 在 Matlab GUI 中加载图像流

java - 在 matlabcontrol 中使用 eval 时出错

图像太大而无法显示在屏幕上 (MATLAB)

iphone - iOS plot 3d图形库

r - 在 R 中绘制图外的图例

javascript - 如何在 uplot 中添加引用线?

r - 在 R 中禁用绘图显示