我在for循环中使用了pylab.plot(),由于某种原因,图例有6个条目,即使for循环只执行了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次,因为如果我输入一个print语句进行调试,它只打印3x字符串。
我在搜索中看到了这一点,但没有发现它有用: Duplicate items in legend in matplotlib?
答案 0 :(得分:0)
我有similar problem。我最终做的是在循环开始时添加plt.close()。我怀疑你看到了6,因为你有一个嵌套的循环,你正在改变x和y。
答案 1 :(得分:0)
我最终成了一个bug /类型,我本来应该写
maxes = [i[0] for i in sorted(maxes, key=itemgetter(1))]
而不是
percentUni = [i[0] for i in sorted(maxes, key=itemgetter(1))]
这个错误意味着maxes仍然是2元组的列表而不是整数列表,这就是事情被绘制两次的原因。因为我限制了y轴,我从未看到有其他数据元素被绘制出来。
感谢您的帮助,那些做出回答的人!