Slo*_*rks 5 matlab plot legend legend-properties
我正在使用MATLAB连续生成多个不同数据集的图.我希望图例位置不会在绘制的线条上重叠,如果这个位置可以自动完成,那将是理想的.
我知道设置'Location'to 'best'来实现这一点,但是当'best'使用(下面)时,图例的放置往往很尴尬.另外,我希望传说能够在情节中.我还遇到了一种方法,使图例透明(这里),以便它不会使绘制的数据不可见,但明确地将图例放在别处是我正在寻找的.
有一种方法以放置在图例的图像的极端('NorthWest','SouthWest'等)自动地,使得其不会在绘制数据(重叠除了从上述方法所建议的)?
那么,您尝试过使用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])如果可能的话,我建议您使用此框架),您可以精确定位网格内图例的位置。接下来您可以做的是检查图中的哪些图形是否与图例交叉(可能基于某个距离阈值定义相对距离函数),如果交叉,则随机重新定位图例(即更改值)和) 并重复left,bottom直到满足您的条件。
如果这仍然困扰您,我可以写一个简短的片段。最后,要知道您始终可以选择将图例放在外部:
set(lgd,'Location','BestOutside')
Run Code Online (Sandbox Code Playgroud)