Matlab:复制图例位置的“外部”缩放行为

时间:2019-01-08 21:45:25

标签: matlab matlab-figure legend

Produced figure

上图是由以下代码产生的:

hold on;
plot([1,2,3,4],[1,2,3,4]);
plot([1,2,3,4],[4,3,2,1]);
legend('foo', 'bar', 'location', 'eastoutside');

重新缩放图形窗口的宽度会使图例保持其尺寸,同时自动缩放图的宽度以占据剩余空间的范围:

scaled figure

编辑图例的位置属性时,位置属性将更改为“无”,从而失去其独特的缩放行为。

是否可以通过某种方式重现缩放行为,以使我可以调整图例的大小/重新放置和/或将其用于非轴-图例关系?

1 个答案:

答案 0 :(得分:0)

您可以获取轴的位置并设置图例相对于轴的位置。这是一个示例:

x = -10:10;
fig  = figure(1);
plot(x,x.^2,x,x.^3);
hL = legend('foo','bar');
% setting the position to the bottom right corner of the axes:
ax = gca;
hL.Position(1:2) = [sum(ax.Position([1 3]))-hL.Position(3) ax.Position(2)];

要在调整图形大小时保持位置更新,可以将位置集分配给图形的SizeChangedFcn属性:

fig.SizeChangedFcn = ...
    'hL.Position(1:2) = [sum(ax.Position([1 3]))-hL.Position(3) ax.Position(2)];';

该图的任何调整大小都会更新图例位置。