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

Slo*_*rks 5 matlab plot legend legend-properties

我正在使用MATLAB连续生成多个不同数据集的图.我希望图例位置不会在绘制的线条上重叠,如果这个位置可以自动完成,那将是理想的.

我知道设置'Location'to 'best'来实现这一点,但是当'best'使用(下面)时,图例的放置往往很尴尬.另外,我希望传说能够在情节中.我还遇到了一种方法,使图例透明(这里),以便它不会使绘制的数据不可见,但明确地将图例放在别处是我正在寻找的.尴尬的传说

有一种方法以放置在图例的图像的极端('NorthWest','SouthWest'等)自动地,使得其不会在绘制数据(重叠除了从上述方法所建议的)?

Chr*_*lis 0

那么,您尝试过使用Location而不是Position? 例如:

x =1:100;
y = x.^2;
lgd = legend('y = x.^2');
set(lgd,'Location','best')
Run Code Online (Sandbox Code Playgroud)

你得到了奇怪的结果,对吗?解决这个问题的一个快速方法是仍然使用Location、 withbest和 提取坐标:

lgd.Position
Run Code Online (Sandbox Code Playgroud)

你应该得到这样的东西:

ans =

     0.7734    0.3037    0.1082    0.0200
Run Code Online (Sandbox Code Playgroud)

映射到:

[left bottom width height]
Run Code Online (Sandbox Code Playgroud)

您需要关注左侧和底部。left 和 Bottom 这两个值指定从图形左下角到图例左下角的距离,它们类似于您正在使用的网格框架。

然后,根据框架的大小(axis([XMIN XMAX YMIN YMAX])如果可能的话,我建议您使用此框架),您可以精确定位网格内图例的位置。接下来您可以做的是检查图中的哪些图形是否与图例交叉(可能基于某个距离阈值定义相对距离函数),如果交叉,则随机重新定位图例(即更改值)和) 并重复leftbottom直到满足您的条件。

如果这仍然困扰您,我可以写一个简短的片段。最后,要知道您始终可以选择将图例放在外部:

set(lgd,'Location','BestOutside')
Run Code Online (Sandbox Code Playgroud)