【问题标题】:Place MATLAB legend such that it does not overlap on the plot放置 MATLAB 图例,使其不会在绘图上重叠
【发布时间】:2015-05-17 12:01:44
【问题描述】:

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

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

有没有办法自动将图例放置在图像的极端('NorthWest''SouthWest' 等)上,这样它就不会与绘制的数据重叠(与方法不同上面建议)?

【问题讨论】:

  • 也许您可以使用Position 属性而不是Location?这需要一些小的调整。你可以做的就是列出你认为合适的位置,比如说,4-6个位置,然后检查这些位置的数据。例如,在给定的图中,计算前 5 个 x 值的较低范围可用并不难,因此这将是放置图例的合适位置。
  • 现在不能尝试这个——但是如果你使用best,确定图例的位置(我确定它是你可以阅读的属性),找出最近的角落然后把它滑过去?应该可以使用所需的轴作为参数调用这个小函数。

标签: matlab plot legend legend-properties


【解决方案1】:

那么,您尝试过使用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]

您需要将注意力集中在左侧和底部。 left 和 bottom 这两个值指定了图形左下角到图例左下角的距离,类似于你使用的网格框。

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

如果这仍然困扰你,我可以写一个简短的 sn-p。最后,要知道您始终可以选择将图例放在外面:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-05
    • 2013-08-27
    • 2011-11-04
    • 2018-09-06
    • 1970-01-01
    • 2019-01-31
    • 2015-06-10
    • 1970-01-01
    相关资源
    最近更新 更多