Matplotlib有重复的图例条目

时间:2014-07-09 19:24:14

标签: python matplotlib plot

我在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个副本。

stupid plot

我知道循环只运行3次,因为如果我输入一个print语句进行调试,它只打印3x字符串。

我在搜索中看到了这一点,但没有发现它有用: Duplicate items in legend in matplotlib?

2 个答案:

答案 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轴,我从未看到有其他数据元素被绘制出来。

感谢您的帮助,那些做出回答的人!