Matlab:复制图例位置的“外部”缩放行为
Posted
技术标签:
【中文标题】Matlab:复制图例位置的“外部”缩放行为【英文标题】:Matlab: Replicate legend location's 'outside' scaling behavior 【发布时间】:2019-06-03 15:22:36 【问题描述】:上图由以下代码生成:
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');
重新缩放图形窗口的宽度会使图例保持其尺寸,同时自动缩放绘图的宽度以占用剩余空间的范围:
编辑图例的位置属性时,位置属性更改为“无”,失去其独特的缩放行为。
有什么方法可以重现缩放行为,以便我可以调整图例的大小/重新定位和/或将其用于非轴-图例关系?
【问题讨论】:
您的要求有点不清楚。您是否希望图例具有相对于 不是 one of the predefined locations 的轴的自定义固定位置? 我想要一个相对于轴的自定义固定位置(左/下/宽/高)。 从示例中不清楚您想在图例位置属性的默认行为中更改什么。 【参考方案1】:您可以获取轴的位置并设置图例相对于它们的位置。这是一个例子:
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)];';
任何调整图形大小都会更新图例位置。
【讨论】:
尝试调整图形窗口的大小,您会发现相对位置保持相对于图形,而不是相对于轴。您提出的解决方案实际上将图例放置在标准化单位中,以便在当前图形尺寸下,它相对于轴显示。以上是关于Matlab:复制图例位置的“外部”缩放行为的主要内容,如果未能解决你的问题,请参考以下文章
如何自动显示图例,使其触及 Matlab(R 2019b)图中角落的边界?