Python: histogtwig con área normalizada a algo distinto de 1

¿Hay una manera de decirle a matplotlib que “normalice” un histogtwig de modo que su área sea igual a un valor específico (distinto de 1)?

La opción “normado = 0” en

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

sólo lo lleva de nuevo a una distribución de frecuencia.

Simplemente calcúlelo y normalícelo a cualquier valor que desee, luego use la bar para trazar el histogtwig.

En una nota al margen, esto normalizará las cosas de modo que el área de todas las barras sea normed_value . La sum en bruto no será normed_value (aunque es fácil tener ese caso, si lo desea).

P.ej

 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() 

introduzca la descripción de la imagen aquí

Entonces, en este caso, si integráramos (sum la altura multiplicada por el ancho) los contenedores, obtendríamos 2.0 en lugar de 1.0. (ie (hist * widths).sum() producirá 2.0 )

Puede pasar un argumento de weights a hist lugar de usar normed . Por ejemplo, si sus intervalos cubren el intervalo [minval, maxval] , tiene n intervalos y desea normalizar el área a A , entonces creo que

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

debe hacer el truco

EDITAR: El argumento de weights debe ser del mismo tamaño que x , y su efecto es hacer que cada valor en x contribuya con el valor correspondiente en weights hacia el conteo de intervalos, en lugar de 1.

Sin embargo, creo que la función hist probablemente podría funcionar con una mayor capacidad para controlar la normalización. Por ejemplo, creo que tal como están, los valores fuera del rango agrupado se ignoran cuando se normaliza, lo que generalmente no es lo que se desea.