【问题标题】:How to plot collections.Counter histogram using matplotlib?如何使用 matplotlib 绘制 collections.Counter 直方图?
【发布时间】:2019-03-05 10:34:47
【问题描述】:

如何绘制下列 Counter 对象的直方图?:

w = collections.Counter()
l = ['a', 'b', 'b', 'b', 'c']
for o in l:
    w[o]+=1

【问题讨论】:

标签: python matplotlib collections


【解决方案1】:

我猜这就是你想要做的?您只需要添加 xtick 标签(请参阅 matplotlib 文档)

import matplotlib.pyplot as plt
import collections

l = ['a', 'b', 'b', 'b', 'c']

count = collections.Counter(l)
print(count)

plt.bar(range(len(count)), count.values())
plt.show()

【讨论】:

    【解决方案2】:

    查看您的数据并尝试,我猜您想要一个条形图而不是直方图。直方图用于绘制分布,但这不是您所拥有的。您可以简单地使用keysvalues 作为plt.bar 的参数。这样,键将自动作为 x 轴刻度标签。

    import collections
    import matplotlib.pyplot as plt
    l = ['a', 'b', 'b', 'b', 'c']
    w = collections.Counter(l)
    plt.bar(w.keys(), w.values())
    

    【讨论】:

    • 这个解决方案导致TypeError: unhashable type: 'dict_keys'
    • @Leopoldo:你能告诉我你用的是什么版本的python吗?
    • 你可以试试plt.bar(list(w.keys()), list(w.values()))
    • Python 3.6.4。使用list 投射效果很好,谢谢!
    • 啊哈,with plt.style.context('fivethirtyeight'):