要回答這個問題,爲什麼在問題的代碼是行不通的:
圖例的位置僅在運行時,當確定數字繪製。另外,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