1. 程式人生 > 程式設計 >python資料分析工具之 matplotlib詳解

python資料分析工具之 matplotlib詳解

不論是資料探勘還是數學建模,都免不了資料視覺化的問題。對於 Python 來說,matplotlib 是最著名的繪相簿,它主要用於二維繪圖,當然也可以進行簡單的三維繪圖。它不但提供了一整套和 Matlab 相似但更為豐富的命令,讓我們可以非常快捷地用 python 視覺化資料。

matplotlib基礎

# 安裝
pip install matplotlib

兩種繪圖風格

MATLAB風格:

基本函式是 plot,分別取 x,y 的值,然後取到座標(x,y)後,對不同的連續點進行連線。

面向物件:

建立一個圖形 fig 和一個座標 ax 。

  • fig:figure(plt.Figure) 是一個能容納各種座標軸,圖形,文字和標籤的容器。
  • ax:axes(plt.Axes) 是一個帶有刻度和標籤的矩形,最終會包含各種視覺化元素。

示例:

import matplotlib.pyplot as plt
import numpy as np

# 圖形顯示風格
plt.style.use('seaborn-whitegrid')

# 建立fig和ax
fig = plt.figure()
ax = plt.axes()

x = np.linspace(0,10,100)
# 顯示sin函式圖形
plt.plot(x,np.sin(x))
# 顯示cos函式圖形
plt.plot(x,np.cos(x))

plt.show()

python資料分析工具之 matplotlib詳解

這就是利用面向物件的方式繪圖,在互動模式中可以看到,每畫一個圖就是產生一個物件,最後再顯示出來。

python資料分析工具之 matplotlib詳解

繪圖樣式

python資料分析工具之 matplotlib詳解

# 調整座標軸上下限
plt.xlim([xmin,xmax])
plt.ylim([ymin,ymax])

plt.axis([xmin,xmax,ymin,ymax])
# 引數:tight:把圖形設定成緊湊模式,不留多餘的部分
# equal:圖形顯示解析度為1:1

線形圖

文字設定

圖形標題:plt.title

座標軸標題:plt.xlabel,plt.ylabel

基礎圖例:plt.legend

注意:對中文不友好,需要額外方法,儘量使用英文

# 示例
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1,100)
plt.plot(x,np.sin(x))
plt.title('sin-function')
plt.xlabel('x-value')
plt.ylabel('y-label')
plt.show()

python資料分析工具之 matplotlib詳解

圖例

通過legend可以設定圖例,同時通過引數的調整可以細膩的設定圖例的位置、形式等。引數主要包括:

  • loc:圖例的位置
  • frameon:是否帶邊框
  • framealpha:顏色透明
  • shadow:陰影
# 示例
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1,100)

fig,ax = plt.subplots()

ax.plot(x,np.sin(x),color='red',label='sin-function')
ax.plot(x,np.cos(x),color='blue',label='cos-function')

ax.legend(loc='upper right',frameon=True,shadow=True,framealpha=0.2)
# 設定圖例位置為右上,有邊框,有陰影,且透明度為0.2

plt.show()

python資料分析工具之 matplotlib詳解

顏色條

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1,100)
I = np.sin(x) * np.cos(x[:,np.newaxis])

plt.imshow(I)
plt.colorbar()
plt.show()

python資料分析工具之 matplotlib詳解

散點圖

散點圖基礎

散點圖主要以點為主,資料是不連續的資料,通過設定線的型號來完成。型號包括‘o'、‘+'、‘*'、‘1'、‘h'、‘D'等等,具體使用探索一下就好,用不到太多。

import matplotlib.pyplot as plt
import numpy as np

# 圖形顯示風格
plt.style.use('seaborn-whitegrid')

x = np.linspace(0,30)
y = np.sin(x)

# 通過設定線型為點來完成散點圖的繪製
plt.plot(x,y,'o',color='blue')
plt.show()

python資料分析工具之 matplotlib詳解

如果設定線型為點線結合,那麼將繪製出連續的線,對應點處為所設定的點型。

畫散點圖還可以使用scatter函式來畫,他有很多更細節的描述,用法與plot類似,對於資料量較大的視覺化時,plot的效率更高一些。

誤差線

import matplotlib.pyplot as plt
import numpy as np

# 圖形顯示風格
plt.style.use('seaborn-whitegrid')

x = np.linspace(0,30)
dy = x * 0.5
y = np.sin(x) + dy

plt.errorbar(x,yerr=dy,fmt='.k',ecolor='blue')
plt.show()

python資料分析工具之 matplotlib詳解

連續誤差線表示的是連續量,可以使用 plt.plot 和 plt.fill_between 來畫出。

import matplotlib.pyplot as plt
import numpy as np

# 圖形顯示風格
plt.style.use('seaborn-whitegrid')

x = np.linspace(0,30)
ysin = np.sin(x)
ycos = np.cos(x)

plt.plot(x,ysin,color='red')
plt.plot(x,ycos,color='blue')

plt.fill_between(x,color='gray',alpha=0.2)
plt.show()

python資料分析工具之 matplotlib詳解

等高線(密度)

  • plt.contour 等高線
  • plt.contourf 自帶填充顏色
  • plt.imshow 顯示圖形

等高線繪製方法:z = f(x,y),z表示高度。當只有一個顏色繪圖時,虛線表示負值,實線表示正值。meshgrid 可以將一維資料變成二維網格資料。

import matplotlib.pyplot as plt
import numpy as np

def f(x,y):
 return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

x = np.linspace(0,5,50)
y = np.linspace(0,40)

# 得到網格點矩陣
x,y =np.meshgrid(x,y)

# 計算z軸的值
z = f(x,y)

# 繪製圖形
plt.contour(x,z,colors='green')
# plt.contour(x,50,cmap='RdGy') # 更改配色,值50等分,紅灰配色
plt.show()

python資料分析工具之 matplotlib詳解

python資料分析工具之 matplotlib詳解

plt.contourf(x,cmap='RdGy') # 改為contourf,自動填充顏色,則變為連續的

python資料分析工具之 matplotlib詳解

直方圖

基本畫法:plt.hist 可以直接畫直方圖,引數主要包括:

  • bins:劃分段(柱數)
  • color:顏色
  • alpha:透明度
  • histtype:圖型別
import matplotlib.pyplot as plt
import numpy as np

data = np.random.randn(1000)
plt.hist(data,bins=30,alpha=0.3,histtype='stepfilled',edgecolor='none')
plt.show()

python資料分析工具之 matplotlib詳解

程式中 random.randn random.rand 相比,randn表示隨機生成的數符合正態分佈,因此畫出圖來是如上圖所示。

子圖

plt.subplot(2,1,1) # 子圖,(2,1)代表,建立2*1的畫布,並且定位於畫布1 ;等效於plt.subplot(211),即去掉逗號
# subplots 可以同時建立多個子圖
figure,ax = plt.subplots(2,3) 
# 這是一個靈活建立子圖的方法,可以建立任意組合的圖形,不必一一對齊,以下為示例:
grid = plt.GridSpec(2,3,wspace=0.3,hspace=0.2)
plt.subplot(grid[,:2])
plt.subplot(grid[1,1:3])

python資料分析工具之 matplotlib詳解

圖例配置

文字註釋

通過不同的座標變換,可以把文字放在不同的位置:

  • ax.transData:以資料為基準
  • ax.transAxes:以軸為基準
import matplotlib.pyplot as plt
import numpy as np

fig,ax = plt.subplots()
ax.axis = ([0,1])

ax.text(0.5,0.5,"Data:(0.5,0.5)",transform=ax.transData)
ax.text(0.5,0.1,"Axes:(0.5,0.1)",transform=ax.transAxes)
plt.show()

python資料分析工具之 matplotlib詳解

箭頭註釋

  • plt.arrow:產生SVG向量圖形式的箭頭,會隨著解析度改變而改變,不推薦
  • plt.annotate:可以建立文字和箭頭
import matplotlib.pyplot as plt
import numpy as np

fig,ax = plt.subplots()

x = np.linspace(0,20,1000)
ax.plot(x,np.cos(x))
ax.axis('equal')

ax.annotate("max",xy=(6.28,1),xytext=(10,4),arrowprops=dict(facecolor='black',shrink=0.05))
ax.annotate('min',xy=(5 * np.pi,-1),xytext=(2,-6),arrowprops=dict(arrowstyle="->",connectionstyle='angle3,angleA=0,angleB=-90'))
plt.show()

python資料分析工具之 matplotlib詳解

python資料分析工具之 matplotlib詳解

三維圖

基礎三維圖

matplotlib 中繪製三維圖用到 mplot3d 包。匯入 mplot3d 包後,可以利用 projection 引數,控制繪製三維圖。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure()
ax = plt.axes(projection='3d')

plt.show()

python資料分析工具之 matplotlib詳解

三維圖中當然包含三個軸,x,y,z。畫線 ax.plot3D,畫點 ax.scatter3D。為了三維效果,它會自動將遠處的點顏色變淺。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure()
ax = plt.axes(projection='3d')

z = np.linspace(0,15,100)
x = np.sin(z)
y = np.cos(z)

ax.plot3D(x,'red')
ax.scatter3D(x,'blue')
plt.show()

三維等高線

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure()
ax = plt.axes(projection='3d')

def f(x,y):
 return np.sin(np.sqrt(x ** 2 + y ** 2))

x = np.linspace(-6,6,30)
y = np.linspace(-6,30)
X,Y =np.meshgrid(x,y)
Z = f(X,Y)

ax.contour3D(X,Y,Z,50)
plt.show()

python資料分析工具之 matplotlib詳解

圖形繪製出來後,可以通過 ax.view_init 來控制觀察的角度,便於理解。

  • 俯仰角度:x-y 平面的旋轉角度
  • 方位角度:沿著 z 軸順時針旋轉角度

pandas繪圖

上篇文章講述了 pandas 的基本用法,pandas 是資料分析中最重要的工具之一,這裡補充一下 pandas 繪圖。

Series繪圖

# 這是一個小栗子
s1 = Series(np.random.randint(1000).cumsum()) # 建立series,cumsum()是指疊加求和,本位數是前幾項之和
s1.plot() # series有自己的plot函式,裡面可以寫入想要的引數

DataFrame繪圖

df = DataFrame(
 np.random.randint(1,40).reshape(10,columns=['A','B','C','D']
 )
df.plot()
# dataframe也有自己的plot,按列畫出來,引數包含ax,選擇輸出的畫布
# 引數:stacked=True,表示一個堆疊的情況,同一個index下,columns一不同顏色疊在一起

總結

到此這篇關於python資料分析工具之 matplotlib詳解的文章就介紹到這了,更多相關python資料分析 matplotlib內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!