2012-07-03 21 views
9

Sto provando a fare un po 'di distribuzione per tracciare e adattare in Python usando SciPy per statistiche e matplotlib per il plottaggio. Sto avendo fortuna con alcune cose come la creazione di un istogramma:python: tracciare un istogramma con una linea di funzione in cima

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!

posso anche prendere gli stessi parametri gamma e tracciare la linea funzione della funzione di distribuzione di probabilità (dopo un po 'googling):

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

enter image description here

Come potrei fare per tracciare l'istogramma myHist con la riga PDF h sovrapposta all'istogramma? Spero che questo sia banale, ma non sono stato in grado di capirlo.

+1

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

+0

You' probabilmente tracciando l'istogramma e la trama in diverse figure. Se chiami semplicemente la funzione hist e plot sulla stessa figura, il 2 dovrebbe essere sovrapposto a – Dhara

+0

@Dhara che era esattamente questo. Sto usando il taccuino ipython e sto facendo esattamente questo. –

risposta

10

basta mettere insieme entrambi i pezzi.

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

per essere sicuri di ottenere quello che vuoi in qualsiasi istanza specifica trama, tenta di creare un oggetto figure prima

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

il problema che stavo incontrando era che sto usando un notebook ipython quindi avrei eseguito una trama, sarebbe una trama interattiva, quindi farei delle cose e ne tracciasene un'altra, e finirebbe in una nuova trama. Grazie per avermi aiutato a capirlo! –

2

Sulla potrebbe essere interessato a tracciare la funzione distibution di qualsiasi istogramma. Questo può essere fatto utilizzando la funzione 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 da un corso Coursera sulla visualizzazione dei dati con Python

Problemi correlati