【问题标题】:'best' location for legend is covering text图例的“最佳”位置是覆盖文本
【发布时间】:2022-06-22 19:11:18
【问题描述】:

我正在向我的绘图中添加一些文本(总是在左上角),当我添加带有 loc='best' 的图例时,它似乎忽略了文本。

重现问题的代码:

import matplotlib.pyplot as plt
x = [1, 2]
plt.plot(x, x, label='plot name')
plt.gca().text(0.05, 0.95, 'some text', transform=plt.gca().transAxes, verticalalignment='top')
plt.legend(loc='best')
plt.show()

我得到的结果:

我的文字总是在同一个地方,所以如果我可以从best 选项中排除“左上角”,它也会起作用。但是很好奇loc的算法为什么会忽略它。

谢谢

【问题讨论】:

  • 这能回答你的问题吗? Move and resize legends-box in matplotlib
  • 谢谢@felixk。它没有回答我的问题。答案建议“手动”移动它。我有很多情节。在所有这些中,文本都在同一个地方,但“最佳”位置可能因人而异。我希望让 loc='best' 算法以某种方式理解文本的存在,或者隐含地告诉它避免使用“左上角”并寻找其他最佳选项。
  • 您可能会在文本的位置画一些虚拟线,例如plt.plot(0.05, 0.95, transform=plt.gca().transAxes, color='none').
  • 你可能想在 [github ](github.com/matplotlib/matplotlib) 上打开一个问题
  • @JohanC 这是一个很好的解决方法!它运作良好。我把它打开也许是为了一个“适当的”解决方案。

标签: python matplotlib legend


【解决方案1】:

不确定人们是否仍然感兴趣,但我遇到了同样的问题,这是另一种解决方法:

您可以使用bbox_to_anchor 来限制图例的免费搜索空间。当然,要使用它,您需要提前大致了解您的文本的位置。

对于您的代码,将 legend 行更改为 plt.gca().legend(loc='best', bbox_to_anchor=(0, 0, 1, 0.9))(将图例限制为仅垂直空间的下 90%)。

完整示例:

import matplotlib.pyplot as plt
x = [1, 2]
plt.plot(x, x, label='plot name')
plt.gca().text(0.05, 0.95, 'some text', transform=plt.gca().transAxes, verticalalignment='top')
plt.gca().legend(loc='best',  bbox_to_anchor=(0, 0, 1, 0.9))
plt.show()

顺便说一句,我在github 开了一个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    相关资源
    最近更新 更多