文章目錄
在大數據應用的時代,除了將資料分析後的結果具體呈現之外,總希望可以在整個分析過程當中利用資料視覺化來看出一些有趣及重要的 insight,尤其在大數據下的機器學習及人工智慧應用更是重要。
1. Matplotlib 簡介
Matplotlib 是一個在 Python 中用來建立靜態、動畫和互動式視覺化的綜合函式庫。其功能豐富,提供了非常多的視覺化方案,是 Python 中用來將數據視覺化非常重要且功能強大的開源 (Open Source) 工具包。因此我們常說 Matplotlib 讓簡單的事情變得更簡單。使用者只需幾行程式碼就可以輕鬆將數據資料,繪製成 2D 折線圖、圓餅圖、長條圖、折線圖、雷達圖、散佈圖及其他各種圖表等等。
Matplotlib 是由神經生物學家 John Hunter 所創建,可用於處理腦電波圖數據,後來則逐漸被許多不同領域人使用及開發。John Hunter 的目標是 Matplotlib 讓簡單的事情變得更簡單,讓困難的事情成為可能。同時 John Hunter 深受 MATLAB 程式環境的啟發,所以在 Matplotlib 中蘊藏了一些其元素想法。
將數據可視覺化並且用數據來講故事,可將分析中獲得的見解有效地傳達給任何受眾,對想認識資料科學的讀者是非常重要的。由於網路上得到的資料大都較為混亂,本系列文章希望透過對 Matplotlib 進行結構化介紹後,為初學者揭開 Matplotlib 一些神秘的面紗。本篇文章會先將重點放在 Matplotlib 的基本介紹及架構認識,並且利用一些簡單範例圖形讓大家認識 Matplotlib 有趣的地方,並進而進入數據視覺化的世界。
2. Matplotlib 安裝
如果使用者是使用 Google Colab 或 Anaconda,其預設已經安裝了 Matplotlib 套件,不用額外安裝。使用者可以在自己的開發環境中使用 pip list 來查看那些套件已經安裝,包括查看 Matplotlib 套件。
- 查看套件清單 – Jupyter Notebook 模式
- 查看套件清單 – Google Colab 模式
- 查看套件清單 – CMD 模式
如果開發環境尚未安裝,Matplotlib 可以利用 CONDA 或 PIP 等套件包管理器來安裝(可參考 Anaconda 3 介紹及安裝教學)。
- 安裝方式 – CONDA
如果使用 conda,最好的實作方式是使用虛擬環境,而不是安裝在基礎環境中:
conda create -n MyEnv
conda activate MyEnv
實際安裝的指令:
conda install matplotlib
- 安裝方式 – PIP
Matplotlib 也可以使用 pip 安裝,你可以執行下面命令來安裝 Matplotlib:
pip install matplotlib
如果是要在 Google Colab 或 Jupyter Notebook 使用 pip 來安裝,要記得在 pip 指令前面要加上 !,參考如下:
!pip install matplotlib
在使用 pip 時,建議一樣使用虛擬環境。相關虛擬環境的詳細指南及教學可參考下面文章。
- 檢查是否安裝成功
要驗證 Matplotlib 是否已經成功安裝在您的系統上,可以在命令提示符下(或 Jupyter Notebook/Colab的編輯單元)執行以下命令。如果 Matplotlib 安裝成功,會顯示安裝的 Matplotlib 版本。
import matplotlib
matplotlib.__version__
例如在 Jupyter Notebook 中查看版本。
3. Matplotlib 架構
Matplotlib 的架構主要分三個部分,由下往上分別是 Backend Layer、Artist Layer 及 Scripting Layer。每一層都知道如何與其下方的層進行溝通,但較低的層不知道其上方的層。每一層都有其負責的功能,說介紹如下:
3.1 Backend Layer
Backend Layer 會負責將 Artist Layer 中的元素渲染到輸出設備,例如顯示器或圖片文件。而 Matplotlib 支援多種不同的 Backend ,包括圖形用戶界面(GUI)後端和圖像文件後端。在使用 Matplotlib 來繪圖或製作數據圖表時,使用者可以通過配置 Matplotlib 的後端來指定圖表的輸出方式。常見的後端有 TkAgg(Tkinter 的後端)、QtAgg(Qt 的後端)、Agg(預設的後端,用於生成圖像文件)等。
由於每個人的開發環境或練習介面可能不同,為了要能有效呈現其強大的繪圖功能,就必須有對應支援的 backend 來溝通。若是想要檢查 Matplotlib 目前使用的後端,我們可以藉由下面方式查看。例如有些人是利用 Python Shell 來跟 Matplotlib 進行互動,此時你可以輸入下列資料,你將得到此時用的 backend 是 ’TkAgg’ 來幫你完成你所要的功能。
若是在 Jupyter Notebook (或Google Colab) 中使用 inline 方式互動,得到的 backend 會是 ‘nbAgg’。
Backend Layer 有三個內建的抽象介面類別 (FigureCanvas、Renderer、Event),其負責事務如下:
- FigureCanvas:用於繪製圖表的畫布,負責管理畫布的大小、背景色等屬性,並提供將圖表渲染到不同輸出設備(如顯示器、文件等)的接口。
- Renderer:負責將 FigureCanvas 上的藝術家對象(Artist)渲染成實際圖形。處理如何將圖形元素轉換為像素,以及如何在輸出設備上放置這些像素。
- Event:該事件處理使用者輸入,如鍵盤按鍵、滑鼠點擊等。事件被捕獲並觸發相應的處理函數,用戶可以通過這種方式與圖表進行交互。
總體而言,FigureCanvas 負責管理圖表的畫布,Renderer 負責將圖形元素渲染成實際的像素,而 Event 事件系統則提供了一個機制,使得可以對使用者的輸入做出反應。這些元素共同工作,實現了 Matplotlib 的圖表繪製和互動功能。
3.2 Artist Layer
Artist (藝術家)是表示圖表上可見元素的基本類型。Artist 分為兩種主要型態:基本藝術家(Primitive Artist) 和組合藝術家(Composite Artist)。
- 基本藝術家(Primitive Artist):
- 基本藝術家是表示單一圖形元素的類型,如線條、文本、圓形、矩形等。這些元素通常是圖表的基本構建塊,也是最基本的繪圖單位。
- 一些常見的基本藝術家類型包括:Line2D (二維線條)、Text(文本標籤)、Rectangle(矩形區域)、Circle(圓形)。
- 組合藝術家(Composite Artist):
- 組合藝術家是包含其他藝術家的容器類型。它們用於組織和管理圖表中的多個元素,形成層次結構。組合藝術家可以包含基本藝術家和其他組合藝術家,從而形成複雜的圖表佈局。
- 一些常見的組合藝術家類型包括:Figure (整個圖表的容器,包含所有其他元素)、Axes (坐標軸的容器,包含數據視圖和標籤)、Axis (坐標軸上的刻度和標籤的容器)、Legend (圖例的容器,包含與圖表相關的標籤資訊)。
簡而言之,基本藝術家表示單一的圖形元素,而組合藝術家用於組織和管理多個藝術家,形成複雜的圖表結構。這種層次結構允許用戶靈活地組織和訂製圖表中的元素,同時提供了方便的介面進行互動式的數據可視化。
範例 1:建立基本藝術家(Primitive Artist)和組合藝術家(Composite Artist)
在這個例子中:
- scatter_artist 和 line_artist 是基本藝術家,分別表示散點圖和線條圖。
- legend_artist 是組合藝術家,表示圖例,它包含了scatter_artist 和 line_artist 的標籤資訊。
整個圖表的層次結構是:
- Figure 包含了 Axes。
- Axes 包含了 scatter_artist、line_artist 和 legend_artist。
這種層次結構讓使用者可以方便地控制各元素的外觀和位置,同時提供互動式的功能,例如顯示和隱藏特定的藝術家。透過這種方式,Matplotlib 提供了豐富的工具,讓用戶能夠自由地定製和組織圖表。
在 Matplotlib 中看到的所有東西,如 Figure 都是一個 Artist instance;而標題、線條、刻度標籤、圖像等都對應於各個 Artist instance(如下圖)。
3.3 Scripting Layer
Scripting Layer 是 Matplotlib 中的最頂層,適合具有較少程式設計經驗的使用者。對於資料分析和視覺化的專用語言提供了更輕量級的腳本介面 matplotlib.pyplot(函數式介面)來簡化常見任務,例如下面幾個簡單的範例。
範例 2:plt.plot() 用於繪製折線圖
範例 3:plt.scatter() 用於繪製散點圖
範例 4:plt.bar() 用於繪製長條圖
範例 5:plt. imshow() 用於顯示圖像
4. Matplotlib 支援圖表類型
Matplotlib 支援的圖表類別非常多,除了下列常見類型外,官網還提供非常完整圖表清單。
經由本文介紹後,相信讀者對 Matplotlib 的簡介、安裝及架構應該有了基本認識,接下來我們將介紹一系列 Matplotlib 學習文章給有所有對使用 Python 進行視覺化有興趣的初學者。
讀者若想要多了解一些 Python 的基本程式語法,可以參考 Python for Beginners 系列文章,裡面有大量範例及 Quiz 練習。若是想要了解一些 AI 、機器學習及深度學習的基礎概念,可以參考這一本書【從 AI 到 生成式 AI:40 個零程式的實作體驗,培養新世代人工智慧素養】,它將帶領讀者在不會程式、不會數學也OK!的情況下,建立最完整的 AI 入門知識。
如果你喜歡這篇文章歡迎訂閱、分享(請載名出處)與追蹤,並持續關注最新文章。同時 FB 及 IG 也會不定期提供國內外教育與科技新知。