bra*_*orm 7 python matplotlib 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]
for i in [1,2,3,4]:
plt.plot(xs,dct['list_%s' %i])
plt.legend(['%s data' %i])
plt.show()
Run Code Online (Sandbox Code Playgroud)

tac*_*ell 18
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()
Run Code Online (Sandbox Code Playgroud)
你正在反对它的legend工作方式,每次调用它都会破坏当前的图例并用新的图例替换它.如果你只给出legend一个字符串列表,它会遍历艺术家(表示要绘制的数据的对象)axes直到它用完标签(因此你的第一条曲线被标记为第4条).如果kwarg label在plot命令中包含,则在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))
Run Code Online (Sandbox Code Playgroud)
请注意,我在此处将标签作为plot函数的参数之一包含在内,以便稍后我们可以调用get_label().
labels = [l.get_label() for l in lines]
plt.legend(lines, labels)
plt.show()
Run Code Online (Sandbox Code Playgroud)
如果您有单独的轴(例如twinx),并且所有图例信息都将在一个图例上显示,则此功能也可以使用.顺便说一句,我似乎记得%符号是旧的,一个应该更喜欢str.format(),但我恐怕我不记得为什么.