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

时间:2015-03-15 08:38:12

标签: matlab plot legend legend-properties

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

我知道将'Location'设置为'best'以实现此目的,但在使用'best'时(下方),图例的放置往往会很尴尬。另外,我希望传说能够在情节中。我还遇到了一种方法,使图例透明(here),这样它就不会使绘制的数据不可见,但显式地将图例放在别处是我正在寻找的。 The awkwardly placed legend

是否有办法将图例自动放置在图像的极端('NorthWest''SouthWest'等),使其不会在绘制的数据上重叠(分开从上面建议的方法)?

1 个答案:

答案 0 :(得分:0)

那么,您是否尝试过使用Location代替Position?例如:

x =1:100;
y = x.^2;
lgd = legend('y = x.^2');
set(lgd,'Location','best')

你得到奇怪的结果吗?解决此问题的一种快速方法是仍然使用Locationbest,并提取坐标:

lgd.Position

你应该得到这样的东西:

ans =

     0.7734    0.3037    0.1082    0.0200

映射到:

[left bottom width height]

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

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

如果这仍然让你烦恼,我可以写一个简短的片段。最后,要知道您可以随时选择将图例放在外面:

set(lgd,'Location','BestOutside')