matplotlib - 如果数据在元组中,python 如何在matplotlib中进行 plot 直方图?

  显示原文与译文双语对照的内容
128 4

我需要 plot 列表中最频繁出现的5个单词的直方图。我使用模块 most_common()的集合 c.counter(). 给我以下元组:

[('you', 7706), ('i', 6570), ('we', 2733), ('my', 2718), ('he', 2369)]

如何在数据为('word',频率) 格式的情况下 plot 直方图?

我熟悉的格式是:['你','你','你',。'i','i','i'。等等 ]

我知道,我可以以在每个元素中乘以整数,以便在直方图中使用 plot 来构建新列表。

时间:原作者:0个回答

82 5

解压你的元组列表:

from matplotlib import pyplot as plt
a = [('you', 7706), ('i', 6570), ('we', 2733), ('my', 2718), ('he', 2369)]
plt.bar(*zip(*a))
plt.show()

示例输出:enter image description here

原作者:
54 4

你可以使用matplotlib条形图:

import matplotlib.pyplot as plt; plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt
items = [('you', 7706), ('i', 6570), ('we', 2733), ('my', 2718), ('he', 2369)]
y_pos = np.arange(len(items)) 
plt.bar(y_pos, [x[1] for x in items], align='center', alpha=0.5)
plt.xticks(y_pos, [x[0] for x in items])
plt.show()

结果:Bar Chart

原作者:
144 5

我更喜欢 Pandas,便于操作数据和打印:

import pandas
freqs = [('you', 7706), ('i', 6570), ('we', 2733), ('my', 2718), ('he', 2369)]
# Create a DataFrame for the data, with names for the columns
freqdf = pandas.DataFrame(freqs, columns=['Word', 'Count']).set_index('Word')
freqdf.plot.barh()

结果 plot:

Bar plot

原作者:
85 2

下面是使用 MatplotlibSeaborn的上述解决方案的扩展:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
lst = [('you', 7706), ('i', 6570), ('we', 2733), ('my', 2718), ('he', 2369)]
val, cnt = (zip(*lst))
val, cnt = list(val), list(cnt)
val, cnt
# (['you', 'i', 'we', 'my', 'he'], [7706, 6570, 2733, 2718, 2369])
# using Matplotlib
length = len(cnt)
plt.bar(np.arange(length), cnt, label=True)
plt.xticks(np.arange(len(cnt)), val)
plt.show()

matpl

# using seaborn 
sns.barplot( val, cnt )

sea

原作者:
...