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的legend设置在图的左上方

绝对位置的图例在浏览器中的行为不同

放置 MATLAB 图例,使其不会在绘图上重叠

如何自动显示图例,使其触及 Matlab(R 2019b)图中角落的边界?

pyqtgraph:在缩放时保持 TextItem 的恒定位置

如何在 MATLAB 中将两个图例添加到单个图中?