在數(shù)據(jù)分析領(lǐng)域,最出名的繪圖工具就是matlib。在Python同樣有類似的功能。就是matplotlib。前面幾章我們都在介紹數(shù)據(jù)的生成,整理,存儲。那么這一章將介紹如果圖形化的呈現(xiàn)這些數(shù)據(jù)。來看下面的代碼
這個代碼通過numpy生成50個隨機數(shù),然后進行求和,最后將50個數(shù)繪制成圖像,k--代表以虛線的方式
import matplotlib.pyplot as plt
from numpy.random import randn
if __name__=="__main__":
plt.plot(randn(50).cumsum(),'k--')
plt.show()
得到的圖片如下
我們還可以在一副圖中顯示多個圖片。
fig=plt.figure()
ax1=fig.add_subplot(2,2,1)
ax2=fig.add_subplot(2,2,2)
ax3=fig.add_subplot(2,2,3)
ax4=fig.add_subplot(2,2,4)
plt.show()
matplotlib的圖像都位于Figure對象中,通過fig.add_subplot可以創(chuàng)建多個圖片。比如fig.add_subplot(2,2,1)代表總共4個圖像,1代表為第1個圖像。那么這樣我們就可以繪制多個圖像,每個圖像用不同的方式來呈現(xiàn)
fig=plt.figure()
ax1=fig.add_subplot(2,2,1)
ax2=fig.add_subplot(2,2,2)
ax3=fig.add_subplot(2,2,3)
ax4=fig.add_subplot(2,2,4)
ax1.plot(randn(50).cumsum(), 'k--')
ax2.hist(randn(50).cumsum())
ax3.scatter(np.arange(30),np.arange(30)+3*randn(30))
ax4.plot(randn(50).cumsum())
plt.show()
下面4 張圖分別繪制了4種圖形。
subplots的參數(shù)如下
我們還可以針對subplot調(diào)整各個圖的間距,通過subplots_adjust就可以達到
下面的代碼通過創(chuàng)造4個圖像,且共享x,y坐標軸。通過wspace和hsapce設(shè)置為0,將各個圖像的左右,上下邊界都連接在了一起。
fig,axis=plt.subplots(2,2,sharex=True,sharey=True)
[axis[i,j].hist(randn(50),bins=50,color='k',alpha=0.5) for i in range(2) for j in range(2)]
plt.subplots_adjust(wspace=0, hspace=0)
plt.show()
結(jié)果如下:
前面介紹了如何作圖,下面將對圖片進行更細化的操作,設(shè)置x,y軸的刻度以及設(shè)置圖片標題。在下面的代碼中,設(shè)置x的刻度為0,10,25,40,50幾個區(qū)間并設(shè)置圖片的標題為test
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
ax.plot(randn(50).cumsum(),'k',label='one')
ax.set_xticks([0,10,25,40,50])
ax.set_title("test")
plt.show()
結(jié)果如下:
還可以通過ax.text(x,y,"2010")的方式對圖標上的某一點坐標進行文本標注
比如ax.text(0,0,"2010")就在0,0的坐標上標注2010的樣式
既然生成了圖片,那么該如何保存呢. 通過savefig的方式就可以進行保存,通過指定不同的圖片后綴名就可以進行文件的保存。
plt.savefig("figure.svg")
plt.savefig("figure.jpg")
plt.savefig("figure.png")
pandas中的繪圖函數(shù):
前面介紹了matplotlib中的繪圖方法,這一章將介紹pandas中繪圖方法。代碼如下
首先通過Series產(chǎn)生數(shù)據(jù),然后Series對象的索引會被傳遞給matplotlib用于繪制X軸
s=Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))
s.plot(color='k',alpha=0.7)
plt.title('pandas test')
plt.show()
結(jié)果如下所示:
接下來看下DataFrame的結(jié)果圖:
d=DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D'],index=np.arange(0,100,10))
d.plot()
plt.show()
結(jié)果如下:
通過上圖可以看到DataFrame的plot方法會在一個subplot中為各列繪制一條線,并自動創(chuàng)建圖例。
Series.plot方法的參數(shù):
DataFrame的plot參數(shù)
在plot中通過指定kind可以生成不同的圖形,比如kind=’bar’就是生成柱狀圖
我們在來看下下面的這組數(shù)據(jù),通過設(shè)置stacked=True即可為DataFrame生成堆積柱狀圖,這樣可以使得每行的值就會被堆積在一起。
frame=DataFrame([[1,16,1,1,0,0],[2,53,18,13,1,0],[0,39,15,18,3,1],[1,48,4,5,1,3]],columns=[1,2,3,4,5,6],index=['Fri','Sat','Sun','Thur'])
frame.index.name=['day']
frame.columns.names=['size']
print frame
frame.plot(kind='barh',stacked=True)
plt.show()
數(shù)據(jù)如下:該數(shù)據(jù)的列表示人的索引。行代表是天數(shù)。這個數(shù)據(jù)的意義在與指示每個人在從周四到周日的消費情況
size 1 2 3 4 5 6
[day]
Fri 1 16 1 1 0 0
Sat 2 53 18 13 1 0
Sun 0 39 15 18 3 1
Thur 1 48 4 5 1 3
通過下面得到的結(jié)果來看,我們可以看到在周末的時候消費明顯增加。
密度圖:
密度圖也成為kde圖,這個圖是生成標準正態(tài)分布圖
s=Series(np.random.randn(20))
s.plot(kind='kde')
plt.show()
得到的正態(tài)分布圖如下:
聯(lián)系客服