11

假设我们有一个 1×2 的子图,我们在里面绘制一些图形,如下所示:

subplot(1,2,1)
surf(peaks(20))

subplot(1,2,2)
surf(peaks(20))

在此处输入图像描述

然后我们要放置一个颜色条:

colorbar

在此处输入图像描述

我不希望结果中的正确数字被挤压。我们如何才能将颜色条放在一行子图中最右边的图形之外并保持它们的大小不变?

注意:实际上,我需要它来绘制颜色条常见的图像,我想把它放在右边。为了简单起见,我使用了这个玩具示例。

4

2 回答 2

14

您可以提取第一个图的位置并在第二个图上使用。重新缩放时,MATLAB 会自动将颜色条向右移动。

f1=figure(1);clf;
s1=subplot(1,2,1);
surf(peaks(20));

s2=subplot(1,2,2);
surf(peaks(20));
hb = colorbar('location','eastoutside');

%% # Solution:
s1Pos = get(s1,'position');
s2Pos = get(s2,'position');
s2Pos(3:4) = [s1Pos(3:4)];
set(s2,'position',s2Pos);



%% # Alternative method. Brute force placement
set(s1,'Units','normalized', 'position', [0.1 0.2 0.3 0.6]);
set(s2,'Units','normalized', 'position', [0.5 0.2 0.3 0.6]);
set(hb,'Units','normalized', 'position', [0.9 0.2 0.05 0.6]);

在此处输入图像描述

于 2012-05-18T10:40:02.787 回答
2

这正是我一直在寻找的。在实施Vidar 的自动解决方案后,我想出了一个简化方案。在添加颜色条之前获取最右侧轴的位置,然后将压缩位置重置为原始位置:

f1=figure(1);clf;
s1=subplot(1,2,1);
surf(peaks(20));

s2=subplot(1,2,2);
surf(peaks(20));
s2Pos = get(s2,'position');

hb = colorbar('location','eastoutside');
set(s2,'position',s2Pos);
于 2013-05-16T14:26:42.910 回答