我使用MATLAB连续生成多个不同数据集的图。我希望图例位置不会在绘制的线条上重叠,如果这个位置可以自动完成,那将是理想的。
我知道将'Location'
设置为'best'
以实现此目的,但在使用'best'
时(下方),图例的放置往往会很尴尬。另外,我希望传说能够在情节中。我还遇到了一种方法,使图例透明(here),这样它就不会使绘制的数据不可见,但显式地将图例放在别处是我正在寻找的。
是否有办法将图例自动放置在图像的极端('NorthWest'
,'SouthWest'
等),使其不会在绘制的数据上重叠(分开从上面建议的方法)?
答案 0 :(得分:0)
那么,您是否尝试过使用Location
代替Position
?例如:
x =1:100;
y = x.^2;
lgd = legend('y = x.^2');
set(lgd,'Location','best')
你得到奇怪的结果吗?解决此问题的一种快速方法是仍然使用Location
和best
,并提取坐标:
lgd.Position
你应该得到这样的东西:
ans =
0.7734 0.3037 0.1082 0.0200
映射到:
[left bottom width height]
您需要关注左侧和底部。这两个值(左和底)指定从图的左下角到图例左下角的距离,它们类似于您正在使用的网格框架。
然后,根据框架的大小(我建议你使用axis([XMIN XMAX YMIN YMAX])
,如果可能的话),你可以精确定位图例中网格的位置。接下来你要做的是检查图中的图形是否与图例交叉路径(可能根据某个距离阈值定义相对距离函数),如果是,则随机重新定位图例(即更改值) left
和bottom
)并重复,直到满足您的条件。
如果这仍然让你烦恼,我可以写一个简短的片段。最后,要知道您可以随时选择将图例放在外面:
set(lgd,'Location','BestOutside')