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


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

        Python中通過matplotlib模塊的pyplot子庫來完成繪圖。Matplotlib可用於創建高質量的圖表和圖形,也可以用於繪制和可視化結果。matplotlib是Python優秀的數據可視化第三方庫matplotlb.pyplot是繪制種類可視化圖形的命令子庫,相當於快捷方式 import matplotlib.pyplot as plt.

  1. 線形圖:

   線性圖是最基本的圖表類型,常用於繪制連續的數據。通過繪制線形圖,可以表現出數據的一種趨勢變化。

Matplotlib的plot(X,Y)用來繪制線形圖,在參數中傳入X和Y的坐標即可。其中,X和Y軸坐標的數據格式可以是列表、數組和Series.

1:坐標數據格式為series

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

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

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

      '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        #解決保存圖像時負號‘-’顯示為方塊的問題

                                                                       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM