在幕布中繪圖,還是在幕布上的單元格中繪圖?

? 實際上,作為最流行和最基礎的資料可視化庫,Matplotlib在某些方面有些令人困惑,這些部分經常有人問起,
- 我應該在什么時候使用“axes”
- 為什么有時用“plt”而有時用“ax”?
- 它們之間有什么區別?
? 在網上有這么多的例子向人們展示如何使用Matplotlib來繪制這種或那種圖表,但我很少看到任何教程提到“為什么”,這可能會使編程經驗較少或從其他語言(如R)切換到這種語言的人感到非常困惑,
? 在本文中,我不會教您使用Matplotlib繪制任何特定圖表,但會嘗試解釋有關Matplotlib的基本但重要的內容——人們通常使用的“plt”和“ax”是什么,
概念

? 注意,當我說“plt”時,它并不存在于Matplotlib庫中,它之所以被稱為“plt”,是因為大多數Python程式員喜歡匯入Matplotlib并創建一個名為“plt”的別名,我相信您應該知道這個別名,
import matplotlib.pyplot as plt
? 然后,回到我們的主題,為了演示,讓我們畫一個簡單的圖表,
import numpy as npplt.plot(np.random.rand(20))
plt.title('test title')
plt.show()

? 如上面標注的截圖所示,當我們使用plt:
- 將生成一個
figure物件(以綠色顯示) Axes物件是通過繪制的折線圖(紅色顯示)隱式生成的- 圖中的所有元素(如x和y軸)都在
Axes物件中呈現(藍色顯示)
? 這也就表示:
figure就像一張紙,你可以畫任何你想畫的東西- 我們必須在“單元格”中繪制圖表,在此處,
Axes是坐標軸 - 如果我們只畫一個圖形,我們不需要先畫一個“單元格”,只要在紙上畫就可以了,我們可以使用
plt.plot(…)
顯式繪制“單元格”

? 當然,我們可以在“紙”上顯式地繪制一個“單元格”,以告訴Matplotlib我們將在這個單元格中繪制一個圖表,然后,我們有以下代碼,
fig, ax = plt.subplots()
ax.plot(np.random.rand(20))
ax.set_title('test title')
plt.show()

? 結果完全一樣,唯一的區別是我們明確地繪制了“單元格”,這樣我們就能夠得到Figure和Axes物件,

? 實際上,當我們只想繪制一個圖形時,沒有必要“繪制”單元格,但是,您必須注意到,當我們想在一個圖中繪制多個圖時,必須這樣做,
n_rows = 2
n_cols = 2fig, axes = plt.subplots(n_rows, n_cols)
for row_num in range(n_rows):
for col_num in range(n_cols):
ax = axes[row_num][col_num]
ax.plot(np.random.rand(20))
ax.set_title(f'Plot ({row_num+1}, {col_num+1})')fig.suptitle('Main title')
fig.tight_layout()
plt.show()

? 在這個代碼片段中,我們首先宣告了要“繪制”的行和列的數量,2×2表示我們要畫4個單元格,

? 然后,在每個單元格中,我們繪制一個隨機的折線圖,并根據其行號和列號分配一個標題,請注意,我們使用的是axis實體,
? 在此之后,我們在“paper”上定義一個“Main title”,即Figure實體,所以,我們有這個超級標題,它不屬于任何“單元格”,但在幕布上,
? 最后,在呼叫show()方法之前,我們需要要求Figure實體通過呼叫它的tight_layout()方法自動在單元格之間提供足夠的填充,
總結

? 希望現在你能更好地理解plt和ax到底是什么,
? 基本上,plt是matplotlib的一個常見別名,pyplot被大多數人使用,當我們使用plt(比如plt.line(…))繪制一些東西時,我們隱式地創建了一個圖形實體和圖形物件內部的坐標軸,當我們只想畫一個圖的時候,這是非常方便的,
? 但是,我們可以顯式地呼叫plt .subplot()來獲得Figure物件和Axes物件,以便對它們執行更多的操作,當我們想在一個圖形上畫多個子圖時,通常需要使用這種方法,
? 另外,下面是用于Figure和Axes類的Matplotlib官方API參考,強烈建議大家自己去看看它們,并嘗試一些方法,以確保自己理解得更深,
https://matplotlib.org/api/axes_api.html?highlight=axes#matplotlib.axes.Axes
https://matplotlib.org/api/_as_gen/matplotlib.figure.Figure.html#matplotlib.figure.Figure
作者:Christopher Tao
deephub翻譯組:孟翔杰
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/1531.html
標籤:其他
