數據分析基本工具-Matplotlib

Katrina Yeh
數據領航員
Published in
12 min readMay 22, 2022

在科技不斷進步的時代下,數據量也逐漸龐大,資料呈現也成為數據分析不可或缺的一環,透過視覺化圖表的呈現可以有效傳遞數據分析想要表達的觀點和結果,本篇要介紹的是如何使用python視覺化函式庫Matplotlib來繪製視覺化圖表!

目錄

Matplotlib介紹
Matplotlib基本元素
Matplotlib兩種使用方法
圖表樣式設定
常見圖表

Matplotlib介紹

Matplotlib為python視覺化核心套件,由John Hunter於2003年開發,使用類似MatLab的語法和樣式來繪圖,因此Matplotlib就是MATLAB+Plot+Library的簡稱。

Matplotlib有一個很常見的模組pyplot,而pyplot這個模組還包含了一個我們經常用來計算和資料分析的套件—Numpy,讓使用者在使用pyplot這個模組時,可以透過Numpy來進行計算,在繪製圖表呈現。

就讓我們來看看要如何使用Matplotlib這個工具吧!

安裝套件

conda install matplotlib #使用conda環境安裝
pip install matplotlib #透過命令列安裝

匯入套件

import matplotlib.pyplot as plt
%matplotlib inline
# 顯示繪圖於notebook中

%matplolib.inline只能在jupyter notebook或google colab中執行,使用其他的編輯器則要在程式碼尾端使用plt.show()的方式來顯示圖表。

準備資料

繪製的資料通常會使用numpy陣列或是pandas欄位,本篇主要會以numpy陣列的方式作為輸入資料。

import numpy as np
x = np.linspace(0, 10, 20) #建立元素總數為20的0~10等差數列的陣列
y = x ** 2

有了資料後,先來認識有哪些基本元素吧~

Matplotlib基本元素

圖片來源-Matplotlib.org
  • Figure 畫布:是最頂層元素,一個Figure可以包含多個Axes
  • Axes 子圖:包含X軸、Y軸、標題、X軸標籤、Y軸標籤
  • Axis 軸:軸上可以設定刻度和刻度標籤
  • Title 標題
  • label 標籤
  • tick 刻度
  • legend 圖例

Matplotlib兩種使用方法

  1. pyplot-style,EX:plt.plot()
  2. 物件導向方法

1. pyplot-style

pyplot-style的優點是會選擇當下的 axe 繪圖且可直接對圖型進行設定;相對的,複雜的圖型就會變得比較不那麼適用。

pyplot-style會用直接呼叫的方式進行繪圖,像是下方繪製折線圖所使用到的plt.plot(), plt.title()

plt.plot(x, y, 'b') # 繪製圖表,x,y為上方建立的資料,'b'表示線為藍色
plt.xlabel('X Axis Title Here') #設定X軸標籤
plt.ylabel('Y Axis Title Here') #設定Y軸標籤
plt.title('String Title Here') #設定圖表標題
plt.show() #顯示圖表
pyplot style-折線圖

在同一個畫布繪製多張子圖

當想並行比較多張圖的差異時,可以用繪製多張子圖這個功能來協助分析

使用方法:plt.subplot(圖表列數, 圖表行數, 圖表編號)

#左圖
plt.subplot(1,2,1)
plt.plot(x, y, 'b--')
plt.xlabel('X Label')
plt.ylabel('Y Label')
plt.title('Title 1')
#右圖
plt.subplot(1,2,2)
plt.plot(y, x, 'g*-')
plt.xlabel('X Label')
plt.ylabel('Y Label')
plt.title('Title 2')

2. Matplotlib物件導向方法

物件導向方法會先透過宣告物件,像是fig與axe,然後再呼叫該物件的方法或屬性來進行繪圖

使用方法:fig, axe = plt.subplots()

fig, axe = plt.subplots()
axe.plot(x, y, 'b') # 繪製圖表,x,y為上方建立的資料,'b'表示線為藍色
axe.set_xlabel('X Axis Title Here') #設定X軸標籤
axe.set_ylabel('Y Axis Title Here') #設定Y軸標籤
axe.set_title('String Title Here') #設定圖表標題
物件導向方法-折線圖

subplots()

同樣的,透過在plt.subplots()加入參數也可以像上方pyplot-style同時繪製多個子圖

使用方法:plt.subplots(nrows=列數量, ncols=行數量, figsize=畫布大小)

此物件為一個軸管理器,可以自行設定圖的排列方式及數量

fig,axes = plt.subplots(nrows=2, ncols=3, figsize=(10,8))# 使用座標軸物件來為繪圖添加內容
# 對第0列 第1行的物件進行繪圖
axes[0][1].plot(x, y)
axes[0][1].set_title('First Plot')
axes[0][1].set_xlabel('X Label')
axes[0][1].set_ylabel('Y label')
# 對第1列 第1行的物件進行繪圖
axes[1][1].plot(y, x)
axes[1][1].set_title('Second Plot')
axes[1][1].set_xlabel('X Label')
axes[1][1].set_ylabel('Y label')
plt.tight_layout() # 自動調整圖形畫布上的軸的位置,以避免內容的重疊。

認識兩種繪製圖表的方法之後,有沒有哪些方法可以讓圖的樣式更貼近分析的主題呢?答案是「有的」!

接下來就為大家介紹一些美化圖表方法

圖表樣式設定

圖例

圖例可以以座標軸物件的 legend() 方法搭配繪圖時的 label 參數創建。

# 建立畫布
fig = plt.figure()
# 增加圖形座標軸組
ax = fig.add_axes([0,0,1,1])
ax.set_title("Title")
ax.set_xlabel("X")
ax.set_ylabel("Y")
# 繪圖
ax.plot(x, 2*x,label='2X')
ax.plot(x, x**2, label="x**2")
ax.plot(x, x**3, label="x**3")
# 繪製圖例
ax.legend()

顏色、線寬、線條樣式

  • 顏色:
    b為blue、g為green、r為red,也可以用color= RGB 16進位代碼來表示顏色,其中alpha表示不透明度。
  • 線寬:linewidthlw
  • 線條樣式:linestylels,EX:- ,-- ,: , .-

EX:’g--’表示綠色虛線

fig, ax = plt.subplots()ax.plot(x, x+15, 'b.-') # blue line with dots
ax.plot(x, x+10, 'g--') # green dashed line
ax.plot(x, x+4, color="blue", alpha=0.5)
ax.plot(x, x+5, color="#81EAE0", linewidth=5, linestyle='-')
ax.plot(x, x+6, color="#E96F25", lw=3, ls='-.') # RGB 16進位代碼

這邊簡單介紹了一些常用的圖表樣式的用法,希望對大家有幫助~

除了上述內容所介紹到的折線圖,以下將為大家介紹如何用Matplotlib繪製其他圖表,就讓我們來看看吧!

常見圖表

一、直方圖

使用方法:plt.hist(資料, width=直方塊寬度)

注意:資料的型態需為list或tuple

import random
data = random.sample(range(1,500), 100) #回傳長度為100且元素唯一的list
plt.hist(data, width=30)
plt.title('Histogram')

💡小補充:random.sample()隨機選擇 k個元素存放置 list 中

直方圖

二、圓餅圖

使用方法:plt.pie(資料, labels=標籤, autopct=顯示比例且設定取到小數點後幾位數)

labels = ["A","B","C","D"]
data = np.random.randint(1, 20, 4)
plt.pie(data, labels = labels, autopct='%1.1f%%')

💡小補充:random.randint()取得隨機整數

autopct = '%.1f':取到小數點後一位
autopct = '%.2f':取到小數點後兩位

如果想在比例後方加上%符號
autopct = '%.1f%%'
autopct = '%.2f%%'

圓餅圖

三、散佈圖

使用方法:plt.scatter(x軸數列, y軸數列, label=點名稱, c=點顏色)

注意:x軸數列與 y軸數列需等長

下方用隨機產生的方式來假設有兩組同學(A, B)各有六位成員,想要了解這兩組同學在數據分析這堂課的表現如何,我們可以透過用設定兩組plt.scatter()來分別呈現這兩組成員們的表現,並用顏色區分兩組資料。

x = random.sample(range(1,11), 6)
y1 = random.sample(range(1,11), 6)
y2 = random.sample(range(1,11), 6)
plt.scatter(x, y1, label= "A", c="blue")
plt.scatter(x, y2, label= "B", c="red")
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Scatter Plot", fontsize= 24) #fontsize字體大小
plt.legend()
散佈圖

四、盒鬚圖

使用方法:plt.boxplot(資料, vert=True, patch_artist=True)

  • vert :預設為True,盒鬚圖為垂直方向,False則為水平方向
  • patch_artist:預設為False,四分位框內不填充,True為填充
data = [np.random.normal(0, std, 100) for std in range(1, 4)]
plt.boxplot(data, vert=True, patch_artist=True)
plt.title("Boxplot")
盒鬚圖

結語

Matplotlib是在進行數據分析時常用到的視覺化工具,看到這邊相信大家都對基礎的繪圖方法有一定的認識了,本篇Matplotlib的介紹就先告一段囉!希望大家往後可以透過美美的圖來說故事,下一篇將會為大家介紹Matplotlib的兄弟Seaborn,請大家敬請期待囉~

本次使用到的程式碼也分享給大家使用~~

參考資料:

Matplotlib官網

常見的探索性資料分析

Matplotlib 簡介

教育部補助大專院校STEM領域及女性研發人才培育計畫目標為建構一個「以智慧物聯技術與實務應用為基礎的教育環境和實作場域」,並規劃出符合此STEM教育領域的創新特色課程,以畢業前進入企業實習的方式,讓學生了解相關產業界所面對的問題,再輔以業界實作場域的教育訓練活動,共同帶領學生發展出動手做、判斷與解決問題的相關技能;本計畫也規劃讓學生以專題實作的組隊方式,跟業界協力領導學生對外參與智慧物聯技術的應用競賽,不僅可以累積學生實務開發的能力,更能激發其潛能來幫助企業解決所面臨的難題。

Data Science Meetup 台灣資料科學社群的使命是「為資料科學人士與企業創建經濟機會」。我們相信大數據蘊藏著巨量的信息和價值,如何處理好大數據並發掘其潛藏的商業價值,就要靠資料科學有效的應用。21世紀是資料科學決勝時代,我們社群將為大家提供與資料科學相關的最新技術和資訊實戰攻略,並透過全球業界人士和學者幫助相關職業規劃與挑戰,社群活動包含

  • 台北實體版聚
  • 線上版聚
  • Mentorship Program

歡迎加入我們社團瞭解更多資訊:https://www.facebook.com/groups/datasciencemeetup/

--

--

Katrina Yeh
數據領航員

東吳大學資料科學系|Data Preprocessing & Machine Learning |樂於學習新事物,正在往資料科學的路上前進中~|📧Email:katrina001205@gmail.com