在數據分析領域,最出名的繪圖工具就是matlib。在Python一樣有相似的功能。就是matplotlib。前面幾章咱們都在介紹數據的生成,整理,存儲。那麼這一章將介紹若是圖形化的呈現這些數據。來看下面的代碼dom
這個代碼經過numpy生成50個隨機數,而後進行求和,最後將50個數繪製成圖像,k--表明以虛線的方式svg
import matplotlib.pyplot as plt函數
from numpy.random import randn工具
if __name__=="__main__":spa
plt.plot(randn(50).cumsum(),'k--')3d
plt.show()對象
獲得的圖片以下blog
咱們還能夠在一副圖中顯示多個圖片。索引
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能夠建立多個圖片。好比fig.add_subplot(2,2,1)表明總共4個圖像,1表明爲第1個圖像。那麼這樣咱們就能夠繪製多個圖像,每一個圖像用不一樣的方式來呈現
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的參數以下
咱們還能夠針對subplot調整各個圖的間距,經過subplots_adjust就能夠達到
下面的代碼經過創造4個圖像,且共享x,y座標軸。經過wspace和hsapce設置爲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()
結果以下:
前面介紹瞭如何做圖,下面將對圖片進行更細化的操做,設置x,y軸的刻度以及設置圖片標題。在下面的代碼中,設置x的刻度爲0,10,25,40,50幾個區間並設置圖片的標題爲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()
結果以下:
還能夠經過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中的繪圖函數:
前面介紹了matplotlib中的繪圖方法,這一章將介紹pandas中繪圖方法。代碼以下
首先經過Series產生數據,而後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()
結果以下所示:
接下來看下DataFrame的結果圖:
d=DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D'],index=np.arange(0,100,10))
d.plot()
plt.show()
結果以下:
經過上圖能夠看到DataFrame的plot方法會在一個subplot中爲各列繪製一條線,並自動建立圖例。
Series.plot方法的參數:
DataFrame的plot參數
在plot中經過指定kind能夠生成不一樣的圖形,好比kind=’bar’就是生成柱狀圖
咱們在來看下下面的這組數據,經過設置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()
數據以下:該數據的列表示人的索引。行表明是天數。這個數據的意義在與指示每一個人在從週四到週日的消費狀況
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
經過下面獲得的結果來看,咱們能夠看到在週末的時候消費明顯增長。
密度圖:
密度圖也成爲kde圖,這個圖是生成標準正態分佈圖
s=Series(np.random.randn(20))
s.plot(kind='kde')
plt.show()
獲得的正態分佈圖以下: