2012-07-03 49 views
9

我試圖做一點分佈繪圖和擬合在Python中使用SciPy的統計和matplotlib繪圖。我有好運氣的一些事情,如創建直方圖:python:繪製直方圖與頂部的功能線

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

輝煌!

我甚至可以採取同樣的伽馬參數並繪製概率分佈函數的線功能(一些谷歌上搜索後):

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

enter image description here

我怎麼會去密謀直方圖myHist疊加在直方圖頂部的PDF行h?我希望這是微不足道的,但我一直無法弄清楚。

+1

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

+0

你」可能會將柱狀圖和情節繪製成不同的數字。如果你只需要在同一個圖上調用hist和plot函數,那麼2就應該疊加 – Dhara

+0

@Dhara就是這樣。我使用ipython筆記本電腦,並做到這一點。 –

回答

10

只是把兩塊拼在一起。

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

,以確保你得到你在任何特定的情節例如想要的東西,嘗試創建一個figure對象第一

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

我遇到的問題是,我使用ipython筆記本,所以我會運行一個情節,它會交互式地繪製,然後我會做一些東西並且再繪製一個,然後它會在一個新的情節中結束。謝謝你幫我解決這個問題! –

2

在可能有意策劃的發佈包功能任何直方圖。 這可以通過使用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 從coursera過程來完成對數據的可視化與Python