Установка относительной частоты в гистограмме 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()
Я думал, что аргумент normed=1 сделает это, но он дает слишком высокие дроби, а иногда и больше 1. Они также зависят от размера ячейки, как будто они не нормализованы размером ячейки или чем-то еще. Тем не менее, когда я устанавливаю cumulative=1, он красиво суммируется до 1. Так в чем же подвох? Кстати, когда я загружаю те же данные в Origin и строю его, он дает мне совершенно правильные дроби. Спасибо!
2 ответов
поскольку нормированная опция hist возвращает плотность точек, e.g dN / dx
вам нужно что-то вроде этого:
# assuming that mydata is an numpy array
ax.hist(mydata, weights=np.zeros_like(data) + 1. / data.size)
# this will give you fractions
или вы можете использовать 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()
.