Python數據分析matplotlib可視化之繪圖

         Matplotlib是一個基於python的2D畫圖庫,可以用python腳本方便的畫出折線圖,直方圖,功率譜圖,散點圖等經常使用圖表,並且語法簡單。python

        Python中經過matplotlib模塊的pyplot子庫來完成繪圖。Matplotlib可用於建立高質量的圖表和圖形,也能夠用於繪製和可視化結果。matplotlib是Python優秀的數據可視化第三方庫matplotlb.pyplot是繪製種類可視化圖形的命令子庫,至關於快捷方式 import matplotlib.pyplot as plt.數組

  1. 線形圖:

   線性圖是最基本的圖表類型,經常使用於繪製連續的數據。經過繪製線形圖,能夠表現出數據的一種趨勢變化。dom

Matplotlib的plot(X,Y)用來繪製線形圖,在參數中傳入X和Y的座標便可。其中,X和Y軸座標的數據格式能夠是列表、數組和Series.函數

1:座標數據格式爲series工具

import numpy as np字體

import matplotlib.pyplot as pltspa

import pandas as pd3d

data={'name':['Tom','Peter','Lucy','Max'],code

      'sex':['female','female','male','male'],orm

      'math':[78,79,83,92],

       'city':['北京','上海','廣州','北京']

       }

df=pd.DataFrame(data)

print(df)

              #DataFrame數據的行索引做爲X軸,math列索引做爲Y軸

plt.plot(df.index,df['math'],color='red',linestyle='-',linewidth=3,marker='D')

 #經過plot函數的color參數能夠指定線條的顏色,

linestyle參數能夠指定線條的形狀,

linewidth參數可指定線條的寬度,

marker參數可對座標點進行標記(默認狀況下,座標點是沒有標記的)

 #結果:

       name   sex   math  city        #建立一個DataFrame數據

0    Tom  female    78   北京

1  Peter  female    79   上海

2   Lucy    male    83   廣州

3    Max    male    92   北京

繪製的線性圖:

                                 

 注意:顏色設置要放在線條和點的樣式的前面,顏色、線條和點的樣式能夠放置於格式字符串。

:plt.plot(df.index,df['math'],'co-')  運行結果以下:

                                                                 

2. 柱狀圖

2.1  繪製柱狀圖主要是使用matplotlibbar函數:

bar函數的color參數能夠設置柱狀圖的填充顏色,

alpha參數能夠設置透明度,

例如:import matplotlib.pyplot as plt

data=[23,85,72,43,52]

plt.bar([1,2,3,4,5],data,color='royalblue',alpha=0.7)   #運行結果:

                                                      

bottom參數用於設置柱狀圖的高度,以此繪製堆積柱狀圖;

 width參數 用於設置柱狀圖的寬度,以此能夠繪製並列柱狀圖

 grid函數用於繪製格網,經過對參數的個性化設置,能夠繪製出個性的格網

 例如:

 import numpy as np

 import matplotlib.pyplot as plt

 data1=[23,85,72,43,52]

 data2=[42,35,21,16,9]

 width=0.3

 plt.bar(np.arange(len(data1)),data1,color='royalblue',alpha=0.7,width=width)

 plt.bar(np.arange(len(data2))+width,data2,color='green',alpha=0.7,width=width)

 plt.grid(color='black',linstyle='--',linewidth=3,axis='y',alpha=0.6)  

#運行結果:

                

Bar函數的經過barh函數能夠繪製水平柱狀圖

 import numpy as np

 import matplotlib.pyplot as plt

 data1=[23,85,72,43,52]

 plt.barh(np.arange(len(data1)),data1,color='green',alpha=0.5)   #如圖所示:

                                                                

2.2 刻度與標籤:

 現實中的柱狀圖的X軸是有刻度標籤的,上述實例中未設置。在matplotlib中,

 經過xticks函數 設置圖標的X軸的刻度和刻度標籤,yticks函數設置y軸的刻度和標籤。

 經過xlabel ylabel 方法給X軸和Y軸添加標籤,

 經過title方法爲圖表添加標題

 例如:

 import numpy as np

 import matplotlib.pyplot as plt

 data1=[23,85,72,43,52]

 labels=['A','B','C','D','E']

 plt.xticks(range(len(data1)),labels)                #設置刻度和標籤

 plt.xlabel('Class')      #plt.xlabel、ylabel、title方法分別給X軸和Y軸,圖標題添加標籤。

 plt.ylabel('Amounts')

 plt.title('Example')

 #plt.bar(range(len(data1)),data)

 plt.bar(np.arange(len(data1)),data1,color='royalblue',alpha=0.7)

 plt.grid(color='black',linstyle='--',linewidth=3,axis='y',alpha=0.6)

#運行結果:

2.3 圖例:               

圖例是標識圖表元素的重要工具,bar函數中傳入label參數表示圖例名稱,經過legend函數便可繪製出圖例

data1=[23,85,72,43,52]

data2=[42,35,21,16,9]

width=0.3

plt.bar(np.arange(len(data1)),data1,width=width,label='one')

plt.bar(np.arange(len(data2))+width,data2,width=width,label='two')

plt.legend()    #結果圖:

                                        

2.4 文本註解:

例如:在柱狀圖中加入文本數字,能夠很清楚的知道每一個類別的數量。經過text函數能夠在指定的座標(x,y)上加入文本註釋

data=[23,85,72,43,52]

labels=['A','B','C','D','E']

plt.xticks(range(len(data)),labels)         #設置刻度和標籤

plt.xlabel('Class')                      

plt.ylabel('Amounts')

plt.title('Example')

plt.bar(range(len(data)),data)

for x,y in zip(range(len(data)),data):

plt.text(x,y,y,ha='center',va='bottom')         #文本註解  # 第一個參數是x軸座標

                                                                 # 第二個參數是y軸座標

                                                               # 第三個參數是要顯式的內容

                                 

3.散點圖:

 Matpltlibscatter函數能夠用來繪製散點圖,傳入XY軸座標。Scatter(X,Y)

利用Numpy建立一組隨機數

import numpy as np

import matplotlib.pyplot as plt

X=np.random.randn(100)

Y=np.random.randn(100)

plt.scatter(X,Y,color='red',marker='D')

#散點圖:

                                                                      

 4. 直方圖

matplotlibhist()函數用來繪製直方圖。

直方圖與條形圖的區別:

直方圖是用面積表示各頻數的多少,矩形的高度表示每一組的頻數或頻率,寬度則表示各組的組距,所以其寬度與高度均有意義;

條形圖(柱狀圖)是用條形的長度表示各種頻數的多少,其寬度是固定的。

因爲分組數據具備連續性,直方圖的各矩形一般是連續排列,而條形圖是分開排列;條形圖主要是用於展現分類數據,而直方圖則主要用於展現數據型數據。

x=np.random.normal(size=100)

plt.hist(x,bins=30)

                                                                

5. 自定義設置

 Matplotlib的圖像位於Figure對象中,實際上就是建立了一個空的圖像窗口。可經過figure函數能夠建立一個新的Figure用於繪製圖表

fig=plt.figure(figsize=(10,6))     #figsize參數能夠設置圖表(整個圖)的長寬比

ax1=fig.add_subplot(2,2,1)     #不能經過空figure繪圖,必須用add_subplot()建立一個或者多個子subplot繪圖區才能繪圖   

#意思是:繪製2*2兩行兩列共4個子subplot圖像

 

ax2=fig.add_subplot(2,2,2)    #在建立Figure對象過程當中,經過add_subplot函數建立子圖,用於繪製圖形

ax3=fig.add_subplot(2,2,3)

years=[1950,1960,1970,1980,1990,2000,2010]

gdp=[300.2,543.3,1075.9,2862.5,5979.6,10289.7,14958.3]

ax1.scatter(years,gdp)     #選用不一樣的ax變量,則能夠在對應的subplot子圖中繪圖(散點圖、線形圖、柱狀圖)

ax2.plot(years,gdp)

ax3.bar(years,gdp)

                                                             

#plt.subplots能夠輕鬆的建立子圖,而axes的索引類型相似於二維數組,這樣就能夠對指定的子圖進行繪製Subplot函數中有3個參數:垂直繪圖的數量、水平繪圖的數量以及表示繪圖位置的索引(基於行進行計算)

 

fig,axes=plt.subplots(2,2,figsize=(10,6))      

axes[1,0].plot(years,gdp)

axes[0,0].scatter(years,gdp)

axes[0,1].bar(years,gdp)

axes[1,1].hist(years,gdp)

                                                          

  注意:當沒有設置figsize時,建立多子圖會顯得擁擠。經過plt..subplot_adjust方法能夠設置子圖的間距修改子圖之間的間距(增長額外的空間以調整兩個子圖之間的距離)

subplots__adjust(left=None,bottom=None,right=None,top=None,wspace=None,hspace=None) ,其中前4個參數用於設置subplot子圖的外圍邊距,wspacehapace參數設置用於設置subplot子圖間的邊距。 

fig,axes=plt.subplots(2,2)    #未設置figsize時,默認狀況下,各sudplot子圖間都會留有必定的間距。

                                                             

years=[1950,1960,1970,1980,1990,2000,2010]

gdp=[300.2,543.3,1075.9,2862.5,5979.6,10289.7,14958.3]

fig,axes=plt.subplots(2,2)

plt.subplots_adjust(wspace=0.3,hspace=0.3)

axes[1,0].plot(years,gdp)

axes[0,0].scatter(years,gdp)

axes[0,1].bar(years,gdp)

axes[1,1].hist(years,gdp)

                                                            

6. 樣式與字體:

Matplotlib自帶了一些樣式供用戶使用,如經常使用的ggplot樣式,經過plt.style.use('ggplot') 函數便可調用該樣式繪圖。

Matplotlib默認爲英文字體,若是繪製中出現漢字就會亂碼,所以須要指定matplotlib的默認字體,這樣就能夠解決亂碼的問題,

plt.rcParams['font.sans-serif']=['simhei']         #指定默認字體

plt.rcParams['axes.unicode_minus']=False        #解決保存圖像時負號‘-’顯示爲方塊的問題

                                                                       

相關文章
相關標籤/搜索