Как построить гистограмму в Matplotlib, когда данные в кортежах? - PullRequest
0 голосов
/ 25 ноября 2018

Мне нужно построить гистограмму из 5 наиболее часто встречающихся слов в списке.Я использовал c.counter (). Most_common () модуля коллекций, чтобы дать мне следующие кортежи:

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

Как я могу построить гистограмму, когда данные находятся в формате («слово»,частота)?

Знакомый мне формат: ['you', 'you', 'you', ..., 'i', 'i', 'i', ... и т. Д.]

Я знаю, что мог бы умножить строку на целое число в каждом элементе, чтобы построить новый список в формате, с которым я знаком, для построения графика на гистограмме, но я чувствую, что должен быть более эффективный способсделать это.

Ответы [ 4 ]

0 голосов
/ 25 ноября 2018

Вот расширение вышеуказанного решения с использованием Matplotlib, а также Seaborn:

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

0 голосов
/ 25 ноября 2018

Распаковать ваш список кортежей:

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

0 голосов
/ 25 ноября 2018

Я предпочитаю панд для простого манипулирования данными и построения графиков:

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

Результирующий график:

Bar plot

0 голосов
/ 25 ноября 2018

Вы можете использовать гистограмму 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...