Matplotlib 有重复的图例条目
我在一个循环里用 pylab.plot() 画图,但不知道为什么图例里有 6 个条目,明明这个循环只执行了 3 次。
#Plot maximum confidence
pylab.figure()
for numPeers in sorted(peers.keys()):
percentUni, maxes = peers[numPeers]
labels = list(set([i[1] for i in sorted(maxes,
key=itemgetter(1))]))
percentUni = [i[0] for i in sorted(maxes, key=itemgetter(1))]
x = []
y = []
ci = []
for l in xrange(len(labels)):
x.append(l+1)
y.append(max(maxes[l*3:l*3+3]))
pylab.plot(x, y, marker='o', label = "N=%d"%numPeers)
pylab.title('Maximal confidence in sender')
pylab.xlabel('Contribute Interval')
pylab.ylabel('Percent confident')
pylab.ylim([0,1])
pylab.xlim([0.5, 7.5])
pylab.xticks(xrange(1,8), labels)
pylab.legend(loc='upper right')
图看起来是这样的,每个图例条目都有 2 个重复的。
我知道这个循环只跑了 3 次,因为我加了一个打印语句来调试,它只打印了 3 次字符串。
我在搜索的时候看到过这个,但没找到有用的信息:matplotlib 中图例重复项的问题?
2 个回答
0
我遇到过一个类似的问题。最后我在循环的开头加了 plt.close()。我猜你看到6的原因是因为你有一个嵌套循环,在里面你在改变 x 和 y 的值。
0
最后发现是我自己的错误,我本应该写
maxes = [i[0] for i in sorted(maxes, key=itemgetter(1))]
而不是
percentUni = [i[0] for i in sorted(maxes, key=itemgetter(1))]
这个错误导致maxes变成了一个包含二元组的列表,而不是一个整数的列表,这就是为什么数据被重复绘制的原因。而且因为我限制了y轴的范围,所以我根本没看到还有其他的数据被绘制出来。
感谢那些帮忙回答的人!