2012-05-21 18 views
9

estoy creando histograma conhistograma acumulativo tiene último punto en y = 0

pylab.hist(data,weights,histtype='step',normed=False,bins=150,cumulative=True) 

conseguir (hay otras parcelas, que no vienen al caso ahora) la línea violeta

histogram

¿Por qué es el histograma cayendo a cero al final otra vez? Las funciones acumulativas deberían ser, en general, no decrecientes. ¿Hay alguna forma de evitar esto, ya sea un error o una función?

EDIT: solución (truco):

# histtype=step returns a single patch, open polygon 
n,bins,patches=pylab.hist(data,weights,histtype='step',cumulative=True) 
# just delete the last point 
patches[0].set_xy(patches[0].get_xy()[:-1]) 
+0

Eso funcionó! Vielen Dank –

Respuesta

0

Este es el comportamiento por defecto. Piénselo como un esquema del histograma como un gráfico de barras. En cuanto a una solución rápida, no que yo sepa. Una solución sería calcular el histograma por su cuenta: python histogram one-liner

+0

Decepcionante, pero gracias. Puedo calcular el histograma (las líneas de una línea no funcionarán, esas son flotantes que están agrupadas en rangos espaciados irregularmente), de hecho ya lo hago, aunque siempre prefiero las funciones precocidas probadas. – eudoxos

0

En caso de que no le guste la buena solución simple de OP, aquí hay una muy complicada en la que construimos la trama a mano. Sin embargo, tal vez sea útil si solo tiene acceso a los recuentos de histogramas y no puede usar la función hist de matplotlib.

import numpy as np 
import matplotlib.pyplot as plt 

data = np.random.randn(5000) 
counts, bins = np.histogram(data, bins=20) 
cdf = np.cumsum(counts)/np.sum(counts) 

plt.plot(
    np.vstack((bins, np.roll(bins, -1))).T.flatten()[:-2], 
    np.vstack((cdf, cdf)).T.flatten() 
) 
plt.show() 

output