如何自动显示图例,使其触及 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)图中角落的边界?的主要内容,如果未能解决你的问题,请参考以下文章