Matplotlib 有重复的图例条目

0 投票
2 回答
2648 浏览
提问于 2025-04-18 12:41

我在一个循环里用 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 个重复的。

stupid plot

我知道这个循环只跑了 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轴的范围,所以我根本没看到还有其他的数据被绘制出来。

感谢那些帮忙回答的人!

撰写回答