2012-07-03 16 views
9

Próbuję zrobić trochę wykresów dystrybucji i dopasowania w Pythonie przy pomocy SciPy dla statystyk i matplotlib dla plotowania. Mam szczęście z niektórych rzeczy jak tworzenie histogramu:python: wykreślanie histogramu z linią funkcyjną na górze

seed(2) 
alpha=5 
loc=100 
beta=22 
data=ss.gamma.rvs(alpha,loc=loc,scale=beta,size=5000) 
myHist = hist(data, 100, normed=True) 

enter image description here

Brilliant!

mogę nawet wziąć te same parametry gamma i wykreślić funkcję linii funkcji rozkładu prawdopodobieństwa (po pewnym googling):

rv = ss.gamma(5,100,22) 
x = np.linspace(0,600) 
h = plt.plot(x, rv.pdf(x)) 

enter image description here

Jak bym go o spiskowanie histogram myHist z linia PDF h nałożona na histogram? Mam nadzieję, że to trywialne, ale nie byłem w stanie tego rozgryźć.

+1

http://matplotlib.sourceforge.net/examples/api/histogram_demo.html – jfs

+0

You” prawdopodobnie wykreśla histogram i wykres na różnych liczbach. Jeśli po prostu wywołasz funkcję hist i plot na tej samej figurze, wówczas 2 powinny zostać nałożone na – Dhara

+0

@Dhara, co było dokładnie tym. Używam notebooka ipython i robię dokładnie to. –

Odpowiedz

10

po prostu ułóż oba kawałki razem.

import scipy.stats as ss 
import numpy as np 
import matplotlib.pyplot as plt 
alpha, loc, beta=5, 100, 22 
data=ss.gamma.rvs(alpha,loc=loc,scale=beta,size=5000) 
myHist = plt.hist(data, 100, normed=True) 
rv = ss.gamma(alpha,loc,beta) 
x = np.linspace(0,600) 
h = plt.plot(x, rv.pdf(x), lw=2) 
plt.show() 

enter image description here

aby upewnić się, co chcesz w każdym konkretnym przypadku działki, spróbuj utworzyć figure pierwszy obiekt

import scipy.stats as ss 
import numpy as np 
import matplotlib.pyplot as plt 
# setting up the axes 
fig = plt.figure(figsize=(8,8)) 
ax = fig.add_subplot(111) 
# now plot 
alpha, loc, beta=5, 100, 22 
data=ss.gamma.rvs(alpha,loc=loc,scale=beta,size=5000) 
myHist = ax.hist(data, 100, normed=True) 
rv = ss.gamma(alpha,loc,beta) 
x = np.linspace(0,600) 
h = ax.plot(x, rv.pdf(x), lw=2) 
# show 
plt.show() 
+3

problem, na który się natknąłem, polegał na tym, że używam notebooka ipython, więc uruchomiłem jedna fabuła, działał interaktywnie, potem robiłbym coś i działał na inny, a skończyłby się nową fabułą. Dzięki za pomoc w zrozumieniu tego! –

2

On mógłby być zainteresowany wykreślania funkcji Distibution z dowolny histogram. Można to zrobić za pomocą funkcji Seaborn kde

import numpy as np # for random data 
import pandas as pd # for convinience 
import matplotlib.pyplot as plt # for graphics 
import seaborn as sns # for nicer graphics 

v1 = pd.Series(np.random.normal(0,10,1000), name='v1') 
v2 = pd.Series(2*v1 + np.random.normal(60,15,1000), name='v2') 

# plot a kernel density estimation over a stacked barchart 
plt.figure() 
plt.hist([v1, v2], histtype='barstacked', normed=True); 
v3 = np.concatenate((v1,v2)) 
sns.kdeplot(v3); 
plt.show() 

enter image description here z kursu Coursera na wizualizacji danych z Pythona

Powiązane problemy