【发布时间】:2017-06-07 12:44:52
【问题描述】:
我知道 bbox_to_anchor 关键字和这个线程,它非常有帮助地建议如何手动放置图例:
How to put the legend out of the plot
但是,我想使用图表中 x 轴和 y 轴的坐标来指定图例位置(在图表内),因为我可能需要将图形移动到具有不同轴环境,并且我不想每次执行此操作时都手动使用这些坐标。这可能吗?
编辑:这里有一个小例子:
import numpy as n
f, axarr = plt.subplots(2,sharex=True)
axarr[1].set_ylim([0.611,0.675])
axarr[0].set_ylim([0.792,0.856])
axarr[0].plot([0, 0.04, 0.08],n.array([ 0.83333333, 0.82250521,0.81109048]), label='test1')
axarr[0].errorbar([0, 0.04, 0.08],n.array([ 0.8, 0.83, 0.82]),n.array([0.1,0.1,0.01]), label='test2')
axarr[1].plot([0, 0.04, 0.08],n.array([ 0.66666667, 0.64888304, 0.63042428]))
axarr[1].errorbar([0, 0.04, 0.08],n.array([ 0.67, 0.64, 0.62]),n.array([ 0.01, 0.05, 0.1]))
axarr[0].legend(bbox_to_anchor=(0.04, 0.82, 1., .102),labelspacing=0.1, handlelength=0.1, handletextpad=0.1,frameon=False, ncol=4, columnspacing=0.7)
我认为让我感到困惑的是图例实际上并不是从 0.82 开始的,实际上对于我更大的图(有 5 个这种类型的子图),我需要使用图例坐标 bbox_to_anchor=(0.04, 1.15, 1., .102) 以使图例出现在坐标 (0.02, 0.83) 上。但也许我还有其他问题?
【问题讨论】:
-
它并不清楚链接问题的解决方案对您有多大帮助,因为默认情况下 bbox_to_anchor 参数采用轴坐标,就像您希望的那样。您可能想举例说明您正在努力实现的目标和/或更好地说明解决方案与您所寻找的不符的程度。
-
谢谢 - 我已经编辑过了。但也许你是对的,我只是误解了 matplotlib 通常如何放置这些图例 - 你知道图例的哪个角放置在 bbox_to_anchor 的坐标上吗?
-
好吧,我以为我对my answer to the linked question 有一个完整的解释。还包含指向 this question 的链接,其中显示了如何解释 4 元组 bbox_to_anchor 规范。我可能仍会尝试在这里回答您的问题,但为此,我需要知道您在询问“图例出现在坐标(0.02,0.83)上时的确切含义”是您想要的左下角吗?
-
抱歉,我以为我已经仔细查看了另一篇帖子,但我没有向下滚动足够远来查看您的答案 - 谢谢,现在试图理解这一点。是的,我确实想在这些坐标处左下角。
-
好吧,抱歉,只是为了检查一下我是否正确:所以当我只说 loc="upper right" 并且没有给出 bbox_to_anchor 规范时,matplotlib 将其解释为相对于轴的 loc。但是当我说 loc="upper right" 并给出 bbox_to_anchor 规范时,该 bbox_to_anchor 规范将相对于轴进行解释,而 loc 关键字指的是图例的角?
标签: python matplotlib