Matplotlib子图中的循环内图例:我的代码有什么问题?

1 投票
2 回答
10853 浏览
提问于 2025-04-17 00:21

我有一个图表,里面有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()

问题是,我得到的图例只选择了列表中每个成员的第一个符号,具体情况请看附上的图片。我的代码哪里出错了???这真是个简单的事情!非常感谢!任何帮助都将不胜感激!enter image description here

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)

撰写回答