[英]Multiple legends in matplotlib in for loop
下面的程序運行良好,但只顯示一個圖例。 我怎樣才能顯示所有四個圖例? 請參閱所附圖片。
import matplotlib.pyplot as plt
dct = {'list_1' : [1,2,4,3,1],'list_2' : [2,4,5,1,2],'list_3' : [1,1,3,4,6],'list_4' : [1,1,2,2,1]}
xs = [0,1,2,3,4]
for i in [1,2,3,4]:
plt.plot(xs,dct['list_%s' %i])
plt.legend(['%s data' %i])
plt.show()
import matplotlib.pyplot as plt
dct = {'list_1' : [1,2,4,3,1],'list_2' : [2,4,5,1,2],'list_3' : [1,1,3,4,6],'list_4' : [1,1,2,2,1]}
xs = [0,1,2,3,4]
for i in [1,2,3,4]:
plt.plot(xs,dct['list_%s' %i], label='%s data' % i)
plt.legend()
plt.show()
您遇到了legend
工作方式,每次調用它都會破壞當前的圖例並用新的圖例替換它。 如果你只給legend
一個字符串列表,它會遍歷axes
的藝術家(代表要繪制數據的對象),直到用完標簽(因此為什么你的第一條曲線被標記為第四條)。 如果在plot
命令中包含kwarg
label
,當您不帶任何參數調用legend
時,它將遍歷藝術家*並為帶有標簽的藝術家生成圖例條目。
[*] 它會選擇哪些藝術家有一些例外
AFAIK,您需要使用所有參數調用圖例一次。
import matplotlib.pyplot as plt
dct = {'list_1' : [1,2,4,3,1],'list_2' : [2,4,5,1,2],
'list_3' : [1,1,3,4,6],'list_4' : [1,1,2,2,1]}
xs = [0,1,2,3,4]
lines = []
for i in range(1,5):
lines += plt.plot(xs,dct['list_%s' %i], label="{} data".format(i))
請注意,我在此處包含了標簽作為 plot 函數的參數之一,以便稍后我們可以調用 get_label()。
labels = [l.get_label() for l in lines]
plt.legend(lines, labels)
plt.show()
如果您有單獨的軸(例如 twinx),這也將起作用,並且所有圖例信息都將通過一個圖例顯示。 順便說一句,我似乎記得 % 符號很舊,人們應該更喜歡 str.format(),但恐怕我不記得為什么了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.