библиотек matplotlib нормированных гистограмм
Я пытаюсь нарисовать часть гистограммы с помощью matplotlib.
вместо того, чтобы рисовать всю гистограмму, которая имеет много выбросов и больших значений, я хочу сосредоточиться только на небольшой части. Исходная гистограмма выглядит так:
hist(data, bins=arange(data.min(), data.max(), 1000), normed=1, cumulative=False)
plt.ylabel("PDF")
и после фокусировки это выглядит так:
hist(data, bins=arange(0, 121, 1), normed=1, cumulative=False)
plt.ylabel("PDF")
обратите внимание, что последний бункер растягивается и худший из всех ТИКов y масштабируется так, что сумма точно 1 (таким образом, точки из текущего диапазона вообще не учитываются)
Я знаю, что могу достичь того, что хочу, рисуя гистограмму по всему возможному диапазону, а затем ограничивая ось интересующей меня частью, но она тратит много времени на вычисление бункеров, которые я все равно не буду использовать/видеть.
hist(btsd-40, bins=arange(btsd.min(), btsd.max(), 1), normed=1, cumulative=False)
axis([0,120,0,0.0025])
есть ли быстрый и простой способ нарисовать только сфокусированную область, но все же получить шкалу Y правильно?
2 ответов
чтобы построить подмножество гистограммы, я не думаю, что вы можете обойти вычисление всей гистограммы.
вы пытались вычислить гистограмму с помощью numpy.histogram
а затем построение области с помощью pylab.plot
или что-то? Т. е.
import numpy as np
import pylab as plt
data = np.random.normal(size=10000)*10000
plt.figure(0)
plt.hist(data, bins=np.arange(data.min(), data.max(), 1000))
plt.figure(1)
hist1 = np.histogram(data, bins=np.arange(data.min(), data.max(), 1000))
plt.bar(hist1[1][:-1], hist1[0], width=1000)
plt.figure(2)
hist2 = np.histogram(data, bins=np.arange(data.min(), data.max(), 200))
mask = (hist2[1][:-1] < 20000) * (hist2[1][:-1] > 0)
plt.bar(hist2[1][mask], hist2[0][mask], width=200)
оригинальный гистограммы:
гистограмма рассчитывается вручную:
гистограмма рассчитана вручную, обрезана: (Б. Н.: значения меньше, потому что бункеры уже)
Я думаю, вы можете нормализовать свои данные, используя заданный вес. (repeat
является функцией numpy).
hist(data, bins=arange(0, 121, 1), weights=repeat(1.0/len(data), len(data)))