Постройте гистограмму из массива частот, упорядоченных по возрастанию - PullRequest
0 голосов
/ 25 апреля 2020

Я хотел бы построить гистограмму с осями X высотой, а по оси Y - частотой этой высоты. Мой набор данных выглядит так:

[10000,200,3000,5400,...]

первое число - это число людей ростом 170 см, второе - 171 см ... Я хочу сделать гистограмму с первым мусорным баком, показывающим, сколько людей между 170 см и 175 см высотой второй 175-180 ...

1 Ответ

0 голосов
/ 25 апреля 2020

Обычно гистограмма вычисляет, сколько из ее входного массива go в каждый из набора бинов. А затем создает гистограмму.

Поскольку у вас уже есть частоты, вы можете напрямую создать гистограмму с высотами по оси X и частотами по оси Y.

Чтобы получить частоты на 5, просто суммируйте 5 последующих высотных частот.

Вот код, иллюстрирующий понятия:

import matplotlib.pyplot as plt

min_height = 153
max_height = 191
height_freq = [1, 2, 2, 4, 5, 11, 52, 53, 113, 193, 292, 442, 550, 792, 983, 1311, 1553, 1735, 1949, 1974, 2082,
               2031, 1852, 1591, 1416, 1142, 816, 729, 478, 333, 211, 125, 78, 49, 20, 15, 11, 2, 2]

fig, ax = plt.subplots(ncols=2, figsize=(12, 4))

heights = range(min_height, max_height + 1)
ax[0].bar(heights, height_freq, color='crimson', edgecolor='white')
ax[0].set_ylabel('height frequency')

heights_per_5 = range(min_height, max_height + 1, 5)
height_freq_per_5 = [sum(height_freq[h - min_height:h - min_height + 5]) for h in heights_per_5]

ax[1].bar(heights_per_5, height_freq_per_5, width=4.5, align='edge', color='limegreen', edgecolor='white')
ax[1].set_ylabel('height frequency (per 5 cm)')

plt.show()

example plot

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