Matplotlib 數據可視化!

數據可視化,就是指將結構或非結構數據轉換成適當的可視化圖表,然後將隱藏在數據中的信息直接展現於人們面前。相比傳統的用表格或文檔展現數據的方式,可視化能將數據以更加直觀的方式展現出來,使數據更加客觀、更具說服力。

數據可視化已經被用於工作科研的方方面面,如工作報表、科研論文等,成爲了不可或缺的基礎技能。現在,就讓我們一起來學習下數據可視化的基礎知識。

一、 常用可視化工具

Python 有許多用於數據可視化的庫,例如常見的有 seaborn、pyecharts(echarts 的 Python 版本)、ggplot(移植於 R 語言的 ggplot2,但是有些差別,Python 有其他方法可以調用 R 語言的 ggplot2)、bokeh、Plotly(同時支持 Python 和 R 語言)等等,這些大多是基於 Matplotlib 進行開發封裝的。

Matplotlib 是一個 Python 2D 繪圖庫(使用 Matplotlib 發佈的 mpl_toolkits 庫可以畫 3D 圖形 ),能夠以多種硬拷貝格式和跨平臺的交互式環境生成出版物質量的圖形,用來繪製各種靜態,動態,交互式的圖表。

Matplotlib 是 Python 最著名的繪圖庫,它提供了一整套和 MATLAB 相似的命令 API,十分適合交互式地進行製圖。而且也可以方便地將它作爲繪圖控件,使用在 Python 腳本,Python 和 IPython Shell、Jupyter notebook,Web 應用程序服務器和各種圖形用戶界面工具包等上面。

二、 Matplotlib 初識

1. 例子

Matplotlib 的圖像是畫在 figure(如 windows,jupyter 窗體)上的,每一個 figure 又包含了一個或多個 axes(一個可以指定座標系的子區域)。最簡單的創建 figure 以及 axes 的方式是通過 pyplot.subplots 命令,創建 axes 以後,可以使用 Axes.plot 繪製最簡易的折線圖。

聲明:以下使用的是 IPython Shell

%matplotlib  # 在IPython Shell調用Matplotlib繪圖接口,需要加這行代碼
import matplotlib.pyplot as plt
import numpy as np
 
fig, ax= plt.subplots()  # 創建一個包含一個axes的figure
 # 繪圖
ax.plot([1, 2, 3, 4][1, 4, 3, 2])

這裏有一個小知識點,很小很小,但是對於剛剛接觸數據可視化的新手可能容易弄混。ax.plot([1, 2, 3, 4], [1, 4, 3, 2]) 這句代碼裏面第一個參數是數據集裏各個數據點的 X 值的集合,第二個參數數據集裏各個數據點的 Y 值的集合。所以這裏輸入的參數值並不是數學上常見的成對座標點如 (x1,y1)、(x2,y2)、...、(xn,yn) 的格式,而是 (x1,x2,...,xn) 和 (y1,y2,...,yn)

2. 例子

和 MATLAB 命令類似,你還可以通過一種更簡單的方式繪製圖像,matplotlib.pyplot 方法能夠直接在當前 axes 上繪製圖像,如果用戶未指定 axes,matplotlib 會幫你自動創建一個。所以上面的例子也可以簡化爲以下這一行代碼。

plt.plot([1, 2, 3, 4][1, 4, 2, 3])

這裏有個 trick(坑)需要注意一下。如上所示,在 IPython 或 jupyter notebook 的同一個代碼框中,如果不對其聲明畫在哪個圖上(可以使用 plot() 函數里面的 ax 參數進行指定),就會自動畫到最後一個創建的圖上(即最後一個 Figure 對象的最後一個 Axes 子圖裏)。

plt.figure()  # 創建一個新的Figure對象
plt.plot([1, 2, 3, 4][1, 4, 2, 3])

更多例子可以在 Matplotlib 官網查看:
https://matplotlib.org/gallery/index.html

三、 Matplotlib 全貌

現在我們來深入看一下 figure 的組成。通過一張 figure 解剖圖,我們可以看到一個完整的 matplotlib 圖像通常會包括以下四個層級,這些層級也被稱爲容器(container),下一節會詳細介紹。在 matplotlib 的世界中,我們將通過各種命令方法來操縱圖像中的每一個部分,從而達到數據可視化的最終效果,一副完整的圖像實際上是各類子元素的集合。

四、 Matplotlib 繪圖接口

matplotlib 提供了兩種最常用的繪圖接口

  1. 顯式創建 figure 和 axes,在上面調用繪圖方法,也被稱爲 OO 模式(object-oriented style)。

  2. 依賴 pyplot 自動創建 figure 和 axes,並繪圖。

使用第一種繪圖接口,是這樣的:

x = np.linspace(0, 2, 100)

fig, ax = plt.subplots()  
ax.plot(x, x, label='linear')  
ax.plot(x, x**2, label='quadratic')  
ax.plot(x, x**3, label='cubic')  
ax.set_xlabel('x label') 
ax.set_ylabel('y label') 
ax.set_title("Simple Plot")  
ax.legend()

而如果採用第二種繪圖接口,繪製同樣的圖,代碼是這樣的:
plt.figure() IPython 裏面需要加這行,jupyter notebook 則不用,原因見 <2.2 例子 2>。

x = np.linspace(0, 2, 100)

plt.figure()  # IPython裏面需要加這行,jupyter notebook則不用
plt.plot(x, x, label='linear') 
plt.plot(x, x**2, label='quadratic')  
plt.plot(x, x**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()

五、 討論

在工作或學習中通常何時會用到數據可視化,希望通過可視化達到什麼目的?

個人經驗:

例子 1:線性迴歸模型的擬合效果。

例子 2:機器學習聚類算法的 K-MEANS 算法和 DBSCAN 算法對數據集劃分類別的效果對比。
下圖來源:K-MEANS 可視化網站 https://www.naftaliharris.com/blog/visualizing-k-means-clustering/

下圖來源:DBSCAN 算法可視化網站 https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/

參考連接:(數據可視化開源教程)

https://github.com/datawhalechina/fantastic-matplotlib

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/DQx9nKN2RPDHmkxsJLGwyA