Гистограмма с оценками - PullRequest
2 голосов
/ 23 мая 2019

Мне нужно сделать гистограмму в Python с распределением оценок. Я использую matplotlib.

import matplotlib.pyplot as plt

plt.title('Histogram Grades')
data = [1, 3, 10, 8, 9, 5, 3, 7, 7, 3, 1, 3, 10, 8, 9, 5, 3, 7, 7, 3]
data.sort
plt.hist(data)
plt.ylabel('Count')
plt.show()

С гистограммой все в порядке, но мне не нравится группировка, которую питон использует для отображения оценок по оси X. Интересно, есть ли способ (какой-нибудь параметр истории или другая библиотека графиков), где я могу иметь столбцы для каждой отдельной оценки?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Поскольку вам нужны гистограммы для частот, я лично рекомендую использовать модуль Counter для подсчета частоты. Он возвращает словарь, ключи которого - оценки, а значения - их соответствующие частоты. импортировать matplotlib.pyplot как plt из коллекции импорт Счетчик

data = [1, 3, 10, 8, 9, 5, 3, 7, 7, 3, 1, 3, 10, 8, 9, 5, 3, 7, 7, 3]
freqs = Counter(data)
# Counter({1: 2, 3: 6, 10: 2, 8: 2, 9: 2, 5: 2, 7: 4})

plt.bar(freqs.keys(), freqs.values())
plt.ylabel('Count')
plt.title('Histogram Grades')
plt.show()

enter image description here

0 голосов
/ 23 мая 2019

Это может быть немного суетливо, но вы можете настроить почти все, когда у вас есть правильные аргументы. Основные проблемы, похоже, заключаются в правильном bins и установке базовой ширины с помощью rwidth.

Может быть, это ближе к тому, на что вы надеетесь:

import matplotlib.pyplot as plt

plt.title('Histogram Grades')
data = [1, 3, 10, 8, 9, 5, 3, 7, 7, 3, 1, 3, 10, 8, 9, 5, 3, 7, 7, 3, 2]
plt.hist(data, rwidth=.8, bins=np.arange(min(data), max(data)+2) - 0.5)

plt.xticks(np.arange(min(data), max(data)+1, 1.0))
plt.ylabel('Count')
plt.show()

enter image description here

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