Matplotlib-Как мне построить график, где значения х являются частотой каждого значения у? - PullRequest
0 голосов
/ 16 января 2019

Если я пытаюсь построить график числа людей, родившихся в каждом месяце, и у меня есть такой список:

[ {"bob": "January"},{"Peter":"February"},{"Mary":"March"}, {"John":"March"}, {"Sully": "March"}, {"Kai":"April"} ,{"Jerry": "February"}, {"Polly":"may"}, {"Nina": "June"}, {"Mic": "July"}, {"Paul": "August"}, {"Ferry": "January"}]

Как лучше всего построить график с месяцами?по оси X и количество людей, которые родились в этом месяце по оси Y?У меня есть значения у, которые являются месяцами, но у меня проблемы с значениями х.Нужно ли сначала просматривать список и вычислять частоту каждого месяца?Я буду работать с гораздо большим списком, содержащим более тысячи наименований, и мне нужно эффективное решение.

1 Ответ

0 голосов
/ 16 января 2019

Вы можете использовать ChainMap, чтобы сначала сгладить ваш список словарей, а затем применить модуль Counter, чтобы получить частоту имен для каждого месяца. Затем вы можете извлечь названия месяцев и соответствующие частоты и построить их с помощью гистограммы. Ниже приведен пример ответа с использованием предоставленных вами данных. Если вы хотите отсортировать названия месяцев по оси X, вы можете использовать ответ, указанный здесь здесь .

from collections import Counter, ChainMap
import matplotlib.pyplot as plt

figure = plt.figure(figsize=(8, 6))

dictionary = [{"bob": "January"},{"Peter":"February"},{"Mary":"March"}, {"John":"March"}, 
                  {"Sully": "March"}, {"Kai":"April"} ,{"Jerry": "February"}, {"Polly":"may"}, 
                  {"Nina": "June"}, {"Mic": "July"}, {"Paul": "August"}, {"Ferry": "January"}]

dict_flat = ChainMap(*dictionary)

frequency = Counter(dict_flat.values()).most_common()
x, y = zip(*frequency)

plt.bar(x, y, width=0.5)
plt.show()

enter image description here

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