python數據分析之:繪圖和可視化

在數據分析領域,最出名的繪圖工具就是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種圖形。

subplots的參數以下

咱們還能夠針對subplot調整各個圖的間距,經過subplots_adjust就能夠達到

下面的代碼經過創造4個圖像,且共享x,y座標軸。經過wspacehsapce設置爲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()

結果以下:

經過上圖能夠看到DataFrameplot方法會在一個subplot中爲各列繪製一條線,並自動建立圖例。

Series.plot方法的參數:

DataFrameplot參數

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()

獲得的正態分佈圖以下:

相關文章
相關標籤/搜索