2012-05-21 5 views
9

tworzę histogram zskumulowana histogram ma ostatni punkt przy y = 0

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

się (istnieją inne działki, które są nieistotne teraz) linia fioletowa

histogram

Dlaczego histogram znów spada do zera na końcu? Skumulowane funkcje powinny ogólnie nie zmniejszać się. Czy istnieje sposób obejścia tego, czy to błąd, czy funkcja?

EDIT: Rozwiązanie (Hack):

# 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

To działa! Vielen Dank –

Odpowiedz

0

Jest to zachowanie domyślne. Pomyśl o tym jako o zarysie histogramu jako wykresu słupkowego. Jeśli chodzi o szybkie obejście problemu, nie o tym wiem. Rozwiązaniem byłoby samodzielne obliczenie histogramu: python histogram one-liner

+0

Rozczarowujące, ale dzięki. Mogę obliczyć histogram (linie jednoliniowe nie będą działały, są to pływaki, które są dzielone na przedziały z odstępami ragularnymi), faktycznie robię to już, chociaż zawsze wolę testowane wstępnie gotowane funkcje. – eudoxos

0

Jeśli nie lubisz łatwego, prostego rozwiązania OP, mamy tu do czynienia ze zbyt skomplikowanym, że skonstruujemy fabułę ręcznie. Może to jednak przydatne, jeśli masz dostęp tylko do histogramu i nie możesz użyć funkcji hist matliblib.

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

Powiązane problemy