HOWTO · Matplotlib

在 Python Matplotlib 中顯示希臘字母

本教程討論如何在 Python 中使用 matplotlib 顯示希臘字母。

本頁內容

若要在 matplotlib 圖表的標題、座標軸標籤或註解中加入希臘字母,可以使用 Mathtext(例如 r"$\alpha$")、用 Python 的 chr() 依 Unicode 碼位建立字元,或直接在字串中輸入 Unicode 字元。數學標籤通常以 Mathtext 最簡便;一般文字可直接使用 Unicode,而標籤需要以路徑處理時,則可使用 TextPath。

在 Matplotlib 中使用 Mathtext 顯示希臘字母

Matplotlib 內建的 Mathtext 解析器可理解許多常見數學表示式,不必啟用外部 LaTeX 渲染。將表示式放在兩個美元符號之間,並使用 Python 原始字串,讓反斜線原樣傳給解析器。在希臘字母名稱前加上反斜線:r"$\alpha$" 會呈現 α。同樣的語法也適用於標題、座標軸標籤和註解。

以下完整範例會在圖表標題中放入兩個符號,並為兩個座標軸加上標籤。程式碼區塊會依原樣保留;其中若有英文標籤,顯示時也會維持英文。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([0, 1, 2], [0, 1, 4])
ax.set_title(r"$\alpha$ and $\beta$")
ax.set_xlabel(r"$\mu$")
ax.set_ylabel(r"$\sigma$")
plt.show()

你可以在同一個字串中放入 Mathtext 表示式和一般文字,例如 r"Mean $\mu$ and spread $\sigma$"。每個數學表示式都要各自放在一對美元符號之間。若要顯示字面上的美元符號,或使用更進階的表示法,請參閱 Matplotlib 的 Mathtext 語法;此處的範例不需要設定 text.usetex=True。

使用 Python 的 chr() 將 Unicode 碼位轉成字元

Python 的 chr() 接受整數形式的 Unicode 碼位,並回傳對應的字元。例如,chr(945) 會得到 α。945 到 969 涵蓋小寫希臘字母的 Unicode 碼位,其中包括終結 sigma(ς)。chr() 一般可用於 Unicode 碼位,不限於字母。若符號來自資料或數值設定,這種方式就很實用。

import matplotlib.pyplot as plt

alpha = chr(945)
beta = chr(946)
fig, ax = plt.subplots()
ax.plot([0, 1, 2], [0, 1, 4])
ax.set_title(f"{alpha} and {beta}")
ax.set_xlabel(alpha)
plt.show()

回傳的字元和其他 Python 字串一樣,可以與一般文字或其他字串組合。chr() 是把碼位轉成字元;它不會把字元轉成整數。若要使用上述範例以外的符號,請從 Unicode 字元表查找所需的碼位。

在 Matplotlib 中直接使用 Unicode 字元

若標籤較短,可以直接在 Python 3 字串中輸入希臘字母。這通常最容易從原始碼看出預期文字。所選的 Matplotlib 字型必須包含該字形;如果字元顯示成方框或完全沒有出現,請改用支援該字元的字型。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([0, 1, 2], [0, 1, 4])
ax.set_title("α and β")
ax.set_xlabel("μ")
ax.set_ylabel("σ")
plt.show()

Python 2 的 unicode_literals 匯入方式(來自 __future__ 模組)僅供了解歷史相容性。撰寫目前的 Python 程式時,請使用上方所示的一般 Python 3 字串方式。

使用 TextPath 建立以路徑表示的文字標籤

TextPath 會將文字轉成 Matplotlib 路徑,之後可以將路徑加入圖表並以 patch 設定樣式。這是建立自訂路徑標籤或形狀的進階選項;一般圖表標題和座標軸標籤用前述方法更簡單。和其他文字一樣,字形外觀取決於是否有可用的字型。

以下範例會為 α-beta 建立路徑、將它加入座標軸,並讓座標軸配合路徑調整範圍。

這個保留範例中可見的標籤仍為英文。

import matplotlib.pyplot as plt
from matplotlib.patches import PathPatch
from matplotlib.textpath import TextPath

text_path = TextPath((0, 0), "α-beta", size=24)
patch = PathPatch(text_path, facecolor="royalblue", edgecolor="none")
fig, ax = plt.subplots()
ax.add_patch(patch)
ax.autoscale_view()
ax.set_aspect("equal")
ax.set_axis_off()
plt.show()

TextPath 的座標會決定標籤的形狀和起始位置。PathPatch 負責設定填色樣式,而 autoscale_view() 會調整可見座標軸範圍,讓新增的 patch 納入其中。一般標題、標籤或註解,建議使用 Mathtext 或 Unicode,讓 Matplotlib 自行處理文字的位置與對齊。