利用 Matplotlib 繪製資料圖形(一)

U2FsdGVkX1x發表於2019-05-08

什麼是 Matplotlib ? Matplotlib 可以做什麼?

Matplotlib 是一個用於 Python 的繪相簿。藉助 Matplotlib, 幾行程式碼就能繪製出高質量的資料圖形。

import matplotlib.pyplot as plt
import numpy as np

# Fixing random state for reproducibility
np.random.seed(19680801)

N = 100
r0 = 0.6
x = 0.9 * np.random.rand(N)
y = 0.9 * np.random.rand(N)
area = (20 * np.random.rand(N))**2  # 0 to 10 point radii
c = np.sqrt(area)
r = np.sqrt(x * x + y * y)
area1 = np.ma.masked_where(r < r0, area)
area2 = np.ma.masked_where(r >= r0, area)
plt.scatter(x, y, s=area1, marker='^', c=c)
plt.scatter(x, y, s=area2, marker='o', c=c)
# Show the boundary between the regions:
theta = np.arange(0, np.pi / 2, 0.01)
plt.plot(r0 * np.cos(theta), r0 * np.sin(theta))

plt.show()
複製程式碼
利用 Matplotlib 繪製資料圖形(一)

繪圖部分僅用了5行程式碼 * 案例來自官方文件

Matplotlib 的設計理念

Matplotlib 使用層級結構來組織事物。Matplotlib 的最上層是 「state-machine environment」,它控制著繪圖的具體內容,比如線條、顏色、文字等。接著是第一層物件導向介面,通過這一層可以建立和追蹤繪圖區域。最後是將 Matplotlib 視為整體與其它應用進行互動的介面。

利用 Matplotlib 繪製資料圖形(一)

我理解的 Matplotlib 層級結構

上圖是我理解的 Matplotlib 層級結構,不一定正確。但是這個理解讓我在使用 Matplotlib 時順暢無阻。注意其中的 Axes 不是字面意思「axis 的複數」,而是指一個包含座標的圖形。Figure 是指一整張大的繪圖區域。我們可以在一個 Figure 裡繪製多個不同的 Axes。

fig,(ax1,ax2) = plt.subplots(1,2)
ax1.set_title('axes 1')
ax2.set_title('axes 2')
fig.suptitle('one figure, two axes')
複製程式碼

利用 Matplotlib 繪製資料圖形(一)

Matplotlib 實際使用前應該知道的細節

利用 Matplotlib 繪製資料圖形(一)

來自 官方文件的 figure 組成,很重要

大部分時候我們的資料,格式是 pandas 中的 DataFrame 或者 numpy 中的 Matrix,但是官方說了:使用這兩種格式繪製圖形,結果不一定符合預期。np.array 和 np.ma.masked_array 才是期望的資料型別。所以,np.martix 和 pd.DataFrame 需要轉換為 np.array:

# convert a dataframe
a = pandas.DataFrame(np.random.rand(4,5), columns = list('abcde'))
a_asndarray = a.values
# convert a matrix
b = np.matrix([[1,2],[3,4]])
b_asarray = np.asarray(b)
複製程式碼

手動轉換資料型別並不是必須的,對於 numpy.recarray 和 pandas.DataFrame,我們可以直接使用變數名作為繪圖時的輸入。

data = pd.DataFrame({
    'a':[1,2,3],
    'b':[1,4,9]
})
fig,ax_1 = plt.subplots()
ax_1.scatter('a', 'b', data=data)
複製程式碼

利用 Matplotlib 繪製資料圖形(一)

也可以一次傳入多對資料,在同一張圖中繪製多個同類圖形。

x = np.array([1,2,3])
plt.plot(x,x,x,x**2,x,x**3)
複製程式碼

利用 Matplotlib 繪製資料圖形(一)

如何簡單方便的開始使用 Matplotlib

對我而言,在 jupyter notebook 中使用 Matplotlib 是一種非常容易且直觀的方式,也是我最為青睞的方式。 關於 jupyter notebook 的安裝網路上有很多教程,我個人推薦安裝 miniconda 後再在 miniconda 中安裝 jupyter notebook。

因為 Matplotlib 可以在很多環境中使用,所以官方的安裝文件也很詳細,但是對於初學者就不太友好了。如果使用 jupyter notebook ,直接在 miniconda 中 conda install matplotlib 就可以開始體驗 Matplotlib 了。

另外,你或許會接觸到 seaborn,ggpy 等繪相簿。ggpy 三年沒更新了,棄坑為妙。seaborn 是在 Matplotlib 上做的更高層次封裝,基本上 seaborn 和 Matplotlib 要混合使用才能實現微調圖形細節。所以用 seaborn 也得了解 Matplotlib。

相關文章