我有一个字符串列表:
a = ['a', 'a', 'a', 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'e', 'e', 'e', 'e', 'e']
我想做一个直方图来显示字母的频率分布。我可以用下面的代码制作一个包含每个字母计数的列表:
from itertools import groupby
b = [len(list(group)) for key, group in groupby(a)]
如何制作直方图?在列表a
中可能有一百万个这样的元素。
我有一个字符串列表:
a = ['a', 'a', 'a', 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'e', 'e', 'e', 'e', 'e']
我想做一个直方图来显示字母的频率分布。我可以用下面的代码制作一个包含每个字母计数的列表:
from itertools import groupby
b = [len(list(group)) for key, group in groupby(a)]
如何制作直方图?在列表a
中可能有一百万个这样的元素。
9条答案
按热度按时间z31licg01#
非常容易与
Pandas
。请注意,
Counter
正在进行频率计数,因此我们的绘图类型是'bar'
,而不是'hist'
。xtupzzrd2#
以下是一个简明的全Pandas方法:
fcg9iug33#
正如上面提到的@ notconblusible,这个问题可以用Pandas和Counter来解决。如果任何原因你不需要使用Pandas,你可以只使用
matplotlib
,使用下面代码中的函数:它将生成x1c 0d1x
91zkwejq4#
不要使用
groupby()
(它需要对输入进行排序),而要使用collections.Counter()
;这不需要创建中间列表来计算输入:你还没有真正指定你认为什么是"直方图"。让我们假设你想在终端上这样做:
演示:
在
numpy.histogram()
和matplotlib.pyplot.hist()
函数中可以找到更复杂的工具,它们可以为您进行计数,matplotlib.pyplot.hist()
还提供图形输出。mf98qq945#
用麻木
使用numpy 1.9或更高版本:
可使用以下公式绘制:
wpcxdonn6#
看看
matplotlib.pyplot.bar
。如果你想要更宽的垃圾箱,还有numpy.histogram
,它更灵活。x33g5p2x7#
在python中制作字符直方图的简单有效方法
avwztpqn8#
这是一段时间以前,所以我不知道如果你仍然需要帮助,但其他人可能会,所以我在这里。如果你被允许使用matplotlib,我认为有一个更简单的解决方案!
这应该得到你一个漂亮的柱状图!如果你喜欢,你也可以做更多的编辑来清理图表
r7s23pms9#
seaborn.countplot
、seaborn.histplot
或sns.displot
的x=
或y=
参数来完成,其中kind='hist'
。