要回答这个问题,为什么在问题的代码是行不通的:
图例的位置仅在运行时,当确定数字绘制。另外,bbox_to_anchor没有设置,所以它将是完整的轴((0,0,1,1)
)。
你可以做的是先画在画布上,然后获取窗口程度
ax.figure.canvas.draw()
bb = leg.get_window_extent().inverse_transformed(ax.transAxes)
不过,这不会给你正确的位置(仅接近)。
现在一个可能的解决方案是不是要取代传说,而是只更新它的内容:
import matplotlib.pyplot as plt
plt.plot(range(10))
ax = plt.gca()
leg = plt.legend(['a'], loc='lower left')
leg.texts[0].set_text("b")
plt.show()
否则,如果更新不是一个选项,你将需要bbox_to_anchor从组委会参数旧图例:
import matplotlib.pyplot as plt
plt.plot(range(10))
ax = plt.gca()
leg = plt.legend(['a'], loc='lower left', bbox_to_anchor=(0.5,0.5))
bb = leg.get_bbox_to_anchor().inverse_transformed(ax.transAxes)
plt.legend(['b'], bbox_to_anchor=bb, loc=leg._loc_real)
plt.show()
在模式已设置为“展开”的情况下,这可能仍会失败。当使用相同的fancybox参数来创建新的图例时,它也是正确的。
只更新内容将会很好。但是,我不认为可以更新所需的所有属性:字体大小,数字点,散点,标签间距,处理文本框,borderaxespad,borderpad,handlelength和fancybox。我认为其中的几个只能通过创建时的图例命令访问。 – mrclary
有没有办法确定传说如何/在哪里锚定?例如,图例的左下角固定在轴的左下角。如果是这样,那么我可以设置'loc ='左下'... – mrclary
我更新了答案。也许这更接近你所需要的。 – ImportanceOfBeingErnest