Установка высоты гистограммы Matplotlib - PullRequest
0 голосов
/ 29 ноября 2018

У меня проблема с изменением высоты столбцов гистограммы.

У меня есть следующая гистограмма:

x = [1,2,
     11,12,
     21,22,
     31,32,33,34,35,
     41,42,43,44,45,46,47,48,
     51,52,53,54,55,56,57,58,59,
     61,62,63,64,65,66,
     71,72,73,74,75,67,
     81,82,83,
     91,92,
     101]
num_bins = [0,3,10,30,40,50,65,80,90,100]  

n, x,_ = plt.hist(x, num_bins)
plt.show()

Random Histogram

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

Итакнапример, общая высота первого бара равна 2, ширина его ячейки равна 3. Следовательно, новая ячейка должна иметь высоту 2/3, с шириной еще 3 и т. д.

Большое вам спасибо!

Ответы [ 2 ]

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

plt.hist возвращает список прямоугольных объектов (которые вы назвали с помощью переменной _).Вы можете изменить высоту этих объектов:

# Create your histogram:
n, bins, rects = plt.hist(x, num_bins, ec='k')

# iterate through rectangles, change the height of each
for r in rects:
    r.set_height(r.get_height()/r.get_width())

# set the y limit
plt.ylim(0,1)

plt.show()

enter image description here

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

По сути, вы ищете нормализованную гистограмму.Это может быть достигнуто с помощью аргумента density.Однако он будет нормализован до 1.Вместо этого вы ищете нормализацию к общему количеству данных.Таким образом, вы можете умножить нормализованную гистограмму на длину массива x.

import numpy as np
import matplotlib.pyplot as plt
x = [1,2,
     11,12,
     21,22,
     31,32,33,34,35,
     41,42,43,44,45,46,47,48,
     51,52,53,54,55,56,57,58,59,
     61,62,63,64,65,66,
     71,72,73,74,75,67,
     81,82,83,
     91,92,
     101]
num_bins = [0,3,10,30,40,50,65,80,90,100]  

n, bins  = np.histogram(x, num_bins, density=True)
plt.bar(bins[:-1], n*len(x), align="edge", width=np.diff(bins), ec="k")
plt.show()

enter image description here

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