Matplotlib子图中的循环内图例:我的代码有什么问题?
我有一个图表,里面有6个不同的小图。我在一个循环中逐个制作这些小图,同时也想在这个时候为每个小图添加图例。下面是一个简单的例子:
matrixSol = scipy.random.random((6,6,4))
print matrixSol
mylegend = ['10 Million','15 Million','1 Million','20 Million','25 Million','5 Million']
for k in range(6):
print k
xs = matrixSol[k,:,0]
ys = matrixSol[k,:,1]
zs = matrixSol[k,:,3]
plt.subplot(2,3,k+1)
plt.plot(ys, zs,'o', c=color[k], markersize=10)#marker = styles[k])
#print mylegend[k]
plt.legend((mylegend[k]),loc=2)
plt.xlabel('X')
plt.ylabel('Y (%)')
plt.show()
问题是,我得到的图例只选择了列表中每个成员的第一个符号,具体情况请看附上的图片。我的代码哪里出错了???这真是个简单的事情!非常感谢!任何帮助都将不胜感激!
2 个回答
2
我很确定在这一行代码中,(mylegend[k])
是被当作一个列表来处理的:
plt.legend((mylegend[k]),loc=2)
就好像字符串(比如 '10 Million'
)本身就是一个列表(比如 ['1', '0', ' ', 'M', 'i', 'l', 'l', 'i', 'o', 'n']
)。
如果你把那一行改成 (mylegend[k],)
(加个逗号来表示这是一个元组),可能就能正常工作了:
plt.legend((mylegend[k],),loc=2)
5
使用:
plt.plot(ys, zs,'o', c=color[k], label=mylegend[k], markersize=10)
plt.legend(loc=2)
另外,Chris Redford 提到的解决方案也可以用:
plt.legend((mylegend[k],), loc=2)