Python: гистограмма с областью, нормализованной к чему-то отличному от 1 - PullRequest
9 голосов
/ 27 января 2012

Есть ли способ указать matplotlib "нормализовать" гистограмму так, чтобы ее площадь равнялась указанному значению (кроме 1)?

Опция "normed = 0" в

n, bins, patches = plt.hist(x, 50, normed=0, histtype='stepfilled')

просто возвращает его к распределению частот.

Ответы [ 2 ]

10 голосов
/ 27 января 2012

Просто вычислите его и нормализуйте до любого значения, которое вы хотите, затем используйте bar для построения гистограммы.

На боковой ноте это нормализует такие вещи, что область всех баров normed_value.Необработанная сумма будет , а не будет normed_value (хотя, если хотите, это легко сделать).

Например,

import numpy as np
import matplotlib.pyplot as plt

x = np.random.random(100)
normed_value = 2

hist, bins = np.histogram(x, bins=20, density=True)
widths = np.diff(bins)
hist *= normed_value

plt.bar(bins[:-1], hist, widths)
plt.show()

enter image description here

Итак, в этом случае, если бы мы интегрировали (суммировали высоту, умноженную на ширину) бункеры, мы получили бы 2,0 вместо 1,0.(т.е. (hist * widths).sum() даст 2.0)

8 голосов
/ 27 января 2012

Вы можете передать weights аргумент hist вместо использования normed.Например, если ваши лотки покрывают интервал [minval, maxval], у вас есть n лотков, и вы хотите нормализовать область до A, тогда я думаю, что

weights = np.empty_like(x)
weights.fill(A * n / (maxval-minval) / x.size)
plt.hist(x, bins=n, range=(minval, maxval), weights=weights)

должно сработать.

РЕДАКТИРОВАТЬ: Аргумент weights должен быть того же размера, что и x, и его эффект состоит в том, чтобы каждое значение в x добавляло соответствующее значение в weights к счетчику бинов вместо 1.

Я думаю, что функция hist, вероятно, могла бы сделать с большей способностью контролировать нормализацию.Например, я думаю, что в нынешнем виде значения вне заданного диапазона игнорируются при нормализации, что, как правило, не то, что вы хотите.

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