簡體   English   中英

for循環中matplotlib中的多個圖例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM