gpt4 book ai didi

python - 如何生成词频直方图,其中条形根据高度排序

转载 作者:太空狗 更新时间:2023-10-29 20:47:14 30 4
gpt4 key购买 nike

我有一长串单词,我想生成列表中每个单词出现频率的直方图。我能够在下面的代码中做到这一点:

import csv
from collections import Counter
import numpy as np

word_list = ['A','A','B','B','A','C','C','C','C']

counts = Counter(merged)

labels, values = zip(*counts.items())

indexes = np.arange(len(labels))

plt.bar(indexes, values)
plt.show()

但是,它不会按等级显示 bin(即按频率,因此最高频率是左侧的第一个 bin,依此类推),即使当我打印 counts 时它对它们进行排序对我来说 Counter({'C': 4, 'A': 3, 'B': 2})。我怎样才能做到这一点?

最佳答案

您可以先对数据进行排序,然后将排序后的数组传递给 bar,从而获得所需的输出;下面我使用 numpy.argsort为了那个原因。情节如下所示(我还在栏中添加了标签):

enter image description here

这是生成带有一些内联注释的绘图的代码:

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

word_list = ['A', 'A', 'B', 'B', 'A', 'C', 'C', 'C', 'C']

counts = Counter(word_list)

labels, values = zip(*counts.items())

# sort your values in descending order
indSort = np.argsort(values)[::-1]

# rearrange your data
labels = np.array(labels)[indSort]
values = np.array(values)[indSort]

indexes = np.arange(len(labels))

bar_width = 0.35

plt.bar(indexes, values)

# add labels
plt.xticks(indexes + bar_width, labels)
plt.show()

如果你只想绘制前 n 个条目,你可以替换行

counts = Counter(word_list)

通过

counts = dict(Counter(word_list).most_common(n))

在上面的例子中,counts 将是

{'A': 3, 'C': 4}

对于 n = 2

如果你想去掉图的框架并直接标记条形图,你可以查看this post .

关于python - 如何生成词频直方图,其中条形根据高度排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35596128/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com