Установка относительной частоты в гистограмме matplotlib - программирование
Подтвердить что ты не робот

Установка относительной частоты в гистограмме matplotlib

У меня есть данные как список поплавков, и я хочу построить его как гистограмму. Функция Hist() отлично работает для построения абсолютной гистограммы. Однако я не могу понять, как представить его в относительном частотном формате - я хотел бы иметь его как фракцию или идеально в виде процента по оси y.

Вот код:

fig = plt.figure()
ax = fig.add_subplot(111)
n, bins, patches = ax.hist(mydata, bins=100, normed=1, cumulative=0)
ax.set_xlabel('Bins', size=20)
ax.set_ylabel('Frequency', size=20)
ax.legend

plt.show()

Я думал, что нормированный = 1 аргумент будет делать это, но он дает слишком высокие доли, а иногда и больше 1. Они также, похоже, зависят от размера бункера, как если бы они не были нормализованы размером буфера или чем-то, Тем не менее, когда я устанавливаю кумулятивный = 1, он красиво суммируется до 1. Итак, где же улов? Кстати, когда я кормлю те же данные в Origin и замышляю это, он дает мне совершенно правильные фракции. Спасибо!

4b9b3361

Ответ 1

Поскольку нормированный параметр исторических данных возвращает плотность точек, например, dN/dx

Что вам нужно, это что-то вроде этого:

 # assuming that mydata is an numpy array
 ax.hist(mydata, weights=np.zeros_like(mydata) + 1. / mydata.size)
 # this will give you fractions

Ответ 2

Или вы можете использовать set_major_formatter, чтобы отрегулировать масштаб оси Y следующим образом:

from matplotlib import ticker as tick

def adjust_y_axis(x, pos):
    return x / (len(mydata) * 1.0)

ax.yaxis.set_major_formatter(tick.FuncFormatter(adjust_y_axis))

просто позвоните adjust_y_axis, как указано выше plt.show().