HOWTO · Matplotlib

如何在 Matplotlib 中設定圖形標題和座標軸標籤字型大小

可以使用字型大小引數,label.set_size()和 rcParams 字典來設定 Matplotlib 中標題和軸的大小和字型。

本頁內容

若只調整單一張圖,可在標題與軸標籤的呼叫中傳入 fontsize。若要套用可重複使用的預設值,請更新 rcParams;若要個別調整已建立的文字物件,則呼叫 set_size()。範例使用的是 Axes 標題;整張圖的標題是另一個項目,需使用 fig.suptitle() 設定。

使用 fontsize 設定標題與軸標籤的字型大小

直接將 fontsize 傳給 Axes.set_title()、Axes.set_xlabel() 和 Axes.set_ylabel()。這些呼叫會控制該 Axes 的標題與軸標籤。如果也要在整張圖的上方加上標題,請使用 fig.suptitle(),並為它指定自己的 fontsize 值。

Matplotlib 以點(point)表示數值型字型大小。若要保持一致,可在多個呼叫中使用相同的數值;若要建立視覺層次,也可以讓標題比其他文字大。由於每次設定文字時都會個別傳入數值,因此只調整某個標籤不會影響其他文字。

以下完整範例會建立一張圖,設定 Axes 標題與兩個軸標籤,並另外加入整張圖的標題。請依版面需要調整點數大小。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([0, 1, 2], [0, 1, 4])
ax.set_title("Values by x", fontsize=16)
ax.set_xlabel("x", fontsize=12)
ax.set_ylabel("value", fontsize=12)
fig.suptitle("Example figure", fontsize=20)
plt.show()

使用 rcParams 設定預設字型大小

rcParams 儲存 Matplotlib 的組態預設值。更新其中的設定後,目前 Python 程序中接著建立的繪圖元素就會使用新的預設值。若希望這些預設值一致套用,請在建立圖表前設定;若某次呼叫需要不同大小,則可在該呼叫中傳入 fontsize。

x 軸與 y 軸標籤使用 axes.labelsize,Axes 標題使用 axes.titlesize,而以 fig.suptitle() 建立的整張圖標題則使用 figure.titlesize。前兩項設定與整張圖的標題設定彼此獨立。這些參數可接受點數等數值,也可接受 Matplotlib 支援的名稱型大小。

import matplotlib.pyplot as plt

plt.rcParams.update({
    "axes.labelsize": 12,
    "axes.titlesize": 16,
    "figure.titlesize": 20,
})

fig, ax = plt.subplots()
ax.plot([0, 1, 2], [0, 1, 4])
ax.set_title("Values by x")
ax.set_xlabel("x")
ax.set_ylabel("value")
fig.suptitle("Example figure")
plt.show()

如果只有特定圖表需要不同的預設值,可以使用 matplotlib.rc_context(),在一段程式碼中暫時套用 rcParams 設定。這樣一來,這些設定就不會成為程序中後續圖表的預設值。

例如,with plt.rc_context({"axes.labelsize": 12, "axes.titlesize": 16}): 會將這兩項設定限定在縮排區塊內的繪圖程式碼。離開區塊後,Matplotlib 會還原先前的設定。若腳本要建立多種樣式的圖表,這種寫法就很方便。

使用 set_size() 個別調整標題與標籤的大小

每個標題或軸標籤都是文字物件,並提供 set_size() 方法。若圖表已經建立,或標題與標籤需要使用不同大小,這種方式就很實用。以下範例使用 plt.gca() 取得目前的 Axes,再設定其標題與軸標籤文字物件的大小。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([0, 1, 2], [0, 1, 4])
ax.set_title("Values by x")
ax.set_xlabel("x")
ax.set_ylabel("value")

axes = plt.gca()
axes.title.set_size(16)
axes.xaxis.label.set_size(12)
axes.yaxis.label.set_size(12)
plt.show()

若要操作多個 Axes,請保留要修改的 Axes 參照,例如使用 ax.title.set_size(16),不要依賴 plt.gca(),因為它會傳回目前作用中的 Axes。若要調整整張圖的標題,可在呼叫 fig.suptitle() 時設定大小,或保留它傳回的文字物件,再呼叫 set_size()。Axes 標題屬於單一繪圖區塊;整張圖的標題則說明整個圖表。