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

Posted

技术标签:

【中文标题】如何自动显示图例,使其触及 Matlab(R 2019b)图中角落的边界?【英文标题】:How can I automatically display a legend so that it touches the border of a corner in a Matlab (R 2019b) plot? 【发布时间】:2020-06-13 12:13:42 【问题描述】:

我知道如何使用图例功能的“位置”输入,但是没有一个选项将图例放在角落里,它们都在图例和图的边界之间留下了一个小空间。我已经看到可以用矢量指定位置,但我不明白该怎么做。任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

静态方法

这是一种方法。我以NorthEast 图例位置为例。对于其他职位,您可以使用类似的逻辑(见下文)。

plot([2 -2]) % example plot...
le = legend('abc', 'Location', 'northeast'); % ... with legend

pos_le = get(le, 'position');
pos_ax = get(gca, 'position');
set(le, 'position', [pos_le(1) pos_le(2) pos_ax(1)+pos_ax(3)-pos_le(1) pos_ax(2)+pos_ax(4)-pos_le(2)]); % new position

要了解其工作原理,请注意位置属性定义为

[lower_pos, left_pos, width, height]

所以在这种情况下,图例宽度设置为轴左侧位置加上轴宽度减去图例左侧位置;同样对于图例高度。此逻辑适用于 NorthEast 位置中的图例。对于其他位置,修改应该很明显。

动态方法

上述方法的一个缺点是,如果调整图形大小,图例将不再对齐。为了在图形大小变化时保持对齐,您可以使用图形的 SizeChangedFcn 属性来指定在图形大小调整时自动执行的代码(ResizeFcn 也可以,但它是 not recommended) .

plot([2 -2]) % example plot...
le = legend('abc', 'Location', 'northeast'); % ... with legend

set(gcf, 'SizeChangedFcn', 'le = findobj(gcf, ''type'', ''legend''); pos_le = get(le, ''position''); pos_ax = get(gca, ''position''); set(le, ''position'', [pos_le(1) pos_le(2) pos_ax(1)+pos_ax(3)-pos_le(1) pos_ax(2)+pos_ax(4)-pos_le(2)]);')

set(gcf, 'position', get(gcf, 'position')-1e-3) % force initial call to SizeChangedFcn
set(gcf, 'position', get(gcf, 'position')+1e-3) % restore initial position

例子:

【讨论】:

以上是关于如何自动显示图例,使其触及 Matlab(R 2019b)图中角落的边界?的主要内容,如果未能解决你的问题,请参考以下文章

即使自定义图例单击以使其不可见,如何在折线图中至少显示一行

如何在 r 图中为多个图例自动定位图例?

r怎么把图例设置在绘图区外

matlab中如何调整legend的位置?

如何在 MATLAB 中将图例条目强制为 10 的幂

在 R plotly 子图中,如何只显示一个图例?