matplotlib for循环中的多个图例

ubby3x7f  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(145)

以下程序执行正常,但只显示一个图例。我怎样才能把四个传说都显示出来?请看所附图片。

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()

eoxn13cs

eoxn13cs1#

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命令中包含kwarglabel,当不带任何参数调用legend时,它将遍历艺术家 * 并为带标签的艺术家生成图例条目。
[*]有一些例外的艺术家,它会拿起

7fhtutme

7fhtutme2#

AFAIK,您需要调用一次legend,并使用所有参数。

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))

注意,我在这里包含了label作为plot函数的参数之一,以便稍后我们可以调用get_label()。

labels = [l.get_label() for l in lines]
plt.legend(lines, labels)
plt.show()

如果您有单独的轴(如twinx),并且所有图例信息都将通过一个图例,这也将起作用。顺便说一句,我似乎记得%表示法是旧的,应该更喜欢str.format(),但恐怕我记不起为什么了。

相关问题