从包含元组的列表中制作频率直方图

10

我希望制作一个词频分布图表,将单词放在x轴上,频数放在y轴上。

我有以下列表:

example_list = [('dhr', 17838), ('mw', 13675), ('wel', 5499), ('goed', 5080), 
                ('contact', 4506), ('medicatie', 3797), ('uur', 3792),
                ('gaan', 3473), ('kwam', 3463), ('kamer', 3447), 
                ('mee', 3278), ('gesprek', 2978)] 

我尝试将其首先转换为pandas DataFrame,然后像下面的示例一样使用pd.hist(),但我只是想不出来,认为这实际上很简单,但可能我漏掉了什么。

import numpy as np
import matplotlib.pyplot as plt

word = []
frequency = []

for i in range(len(example_list)):
  word.append(example_list[i][0])
  frequency.append(example_list[i][1])


plt.bar(word, frequency, color='r')
plt.show()
2个回答

11

使用pandas:

import pandas as pd
import matplotlib.pyplot as plt

example_list = [('dhr', 17838), ('mw', 13675), ('wel', 5499), ('goed', 5080), ('contact', 4506), ('medicatie', 3797), ('uur', 3792), ('gaan', 3473), ('kwam', 3463), ('kamer', 3447), ('mee', 3278), ('gesprek', 2978)] 

df = pd.DataFrame(example_list, columns=['word', 'frequency'])
df.plot(kind='bar', x='word')

输入图像描述


10

您不能直接将单词传递给matplotlib.pyplot.bar。但是,您可以为bar创建一个索引数组,然后使用matplotlib.pyplot.xticks将这些索引替换为words

import numpy as np
import matplotlib.pyplot as plt

indices = np.arange(len(example_list))
plt.bar(indices, frequency, color='r')
plt.xticks(indices, word, rotation='vertical')
plt.tight_layout()
plt.show()

输入图像描述

用一个简单的zip和列表解包可以替代用for-循环创建wordfrequency

word, frequency = zip(*example_list)

1
谢谢您的评论,这正是我在寻找的,同时zip函数也非常有用:) - jjn
请在调用“plt”和“np”时定义您使用的库。 - biogeek
@biogeek,这些已经在问题中定义了,所以我认为很难因此而对答案进行投票。但为了使答案更加自包含,我也将它们包含在代码中。感谢您的评论。 :) - MSeifert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接