在Python中使用Counter()来构建直方图?

mar*_*arc 49 python histogram

我在另一个问题上看到,我可以使用它Counter()来计算一组字符串中出现的次数.所以如果['A','B','A','C','A','A']我得到了Counter({'A':3,'B':1,'C':1}).但是现在,我如何使用该信息来构建直方图?

Igo*_*ato 66

对于您的数据,最好使用条形图而不是直方图.看看这段代码:

from collections import Counter
import numpy as np
import matplotlib.pyplot as plt


labels, values = zip(*Counter(['A','B','A','C','A','A']).items())

indexes = np.arange(len(labels))
width = 1

plt.bar(indexes, values, width)
plt.xticks(indexes + width * 0.5, labels)
plt.show()
Run Code Online (Sandbox Code Playgroud)

结果: 在此输入图像描述

  • 我搜索了“从计数器生成直方图”,它是Google搜索结果#1。它也几乎与OP的问题标题相同。对于搜索该查询的所有人员来说,值得进行一次更新,这可能是对该问题的较高百分比的观点。您可能会获得更多的赞成票和更新(添加)直方图示例的收藏夹 (2认同)

Phi*_*oud 17

您可以使用pandas编写一些非常简洁的代码来执行此操作:

In [24]: import numpy as np

In [25]: from pandas import Series

In [27]: sample = np.random.choice(['a', 'b'], size=10)

In [28]: s = Series(sample)

In [29]: s
Out[29]:
0    a
1    b
2    b
3    b
4    a
5    b
6    b
7    b
8    b
9    a
dtype: object

In [30]: vc = s.value_counts()

In [31]: vc
Out[31]:
b    7
a    3
dtype: int64

In [32]: vc = vc.sort_index()

In [33]: vc
Out[33]:
a    3
b    7
dtype: int64

In [34]: vc.plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)

导致:

在此输入图像描述

  • 但OP特别询问了“Counter”。要回答这个问题,您应该展示如何从“Counter”转到“Series”,除非有其他更适合字典的 Pandas 类型。目前尚不清楚您的解决方案是否真正适用于此——这只是条形图的一个示例。 (2认同)