首页 文章

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

提问于
浏览
5

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

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

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

1 回答

  • 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]) ,如果可能的话),你可以 pinpoint the position of the legend within the grid . 接下来你要做的是检查图中的图形是否与图例交叉路径(可能根据某个距离阈值定义相对距离函数),如果是,则随机重新定位图例(即更改值) leftbottom )并重复,直到满足您的条件 .

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

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

相关问题