簡體   English   中英

當數據在元組中時,如何在matplotlib中繪制直方圖?

[英]how to plot histogram in matplotlib when data is in tuples?

我需要在列表中繪制5個最頻繁出現的單詞的直方圖。 我使用了集合模塊的c.counter()。most_common()給我以下元組:

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

當數據采用格式(“字”,頻率)時,如何繪制直方圖?

我熟悉的格式為:['you','you','you',...,'i','i','i',...等]

我知道我可以將字符串乘以每個元素中的整數以以我熟悉的格式在直方圖上繪制一個新列表,但是我覺得必須有一種更有效的方法來執行此操作。

解壓縮您的元組列表:

from matplotlib import pyplot as plt

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

plt.bar(*zip(*a))
plt.show()

樣本輸出: 在此處輸入圖片說明

您可以使用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()

結果: 條形圖

我更喜歡熊貓,以便於操作數據和繪圖:

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()

結果圖:

條形圖

這是使用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 )

海

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM