那么,您是否尝试过使用Location而不是Position?例如:
x =1:100;
y = x.^2;
lgd = legend('y = x.^2');
set(lgd,'Location','best')
而你得到奇怪的结果是正确的?解决这个问题的一种快速方法是仍然使用最佳位置,并提取坐标:
lgd.Position
你应该得到这样的东西:
ans =
0.7734 0.3037 0.1082 0.0200
映射到:
[left bottom width height]
您需要关注左侧和底部.这两个值(左和底)指定从图的左下角到图例的左下角的距离,它们类似于您正在使用的网格框架.
然后,根据框架的大小(我建议您使用轴([XMIN XMAX YMIN YMAX]),如果可能),您可以精确定位图形在网格中的位置.接下来你要做的是检查图中的图形是否与图例交叉路径(可能根据某个距离阈值定义相对距离函数),如果是,则随机重新定位图例(即更改值)左边和底部)并重复,直到你的条件得到满足.
如果这仍然困扰你,我可以写一个简短的片段.最后,要知道您可以随时选择将图例放在外面:
set(lgd,'Location','BestOutside')