HOWTO · Matplotlib

在 Matplotlib 中的圖中新增文字

本教程示範如何使用 `matplotlib.pyplot.text()` 函式,在 Matplotlib 繪圖或座標軸中的指定位置新增文字。

本頁內容

使用 matplotlib.pyplot.text() 可在 Matplotlib 繪圖中的指定位置放置標籤或註記。此函式接受 x、y 座標,接著是要顯示的字串;選用引數則可控制文字外觀。例如,plt.text(2, 20, "Peak point") 會在資料座標 (2, 20) 放置標籤。若使用 Axes 物件,可呼叫等效的 ax.text(2, 20, "Peak point")。完整引數清單請參閱 pyplot.text() API 參考。

使用 matplotlib.pyplot.text() 在繪圖中新增文字

以下範例會繪製折線,並在其中一個資料點放置標籤。範例使用 pyplot 介面,並設定顯示範圍,讓指定座標位於繪圖可見範圍內。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4]
y = [10, 15, 25, 30]

plt.plot(x, y, marker="o")
plt.xlim(0, 5)
plt.ylim(0, 35)
plt.text(3, 25, "Peak point", fontsize=12, color="crimson")
plt.title("A labeled line plot")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

x 和 y 儲存繪製資料,而函式呼叫會在座標 (3, 25) 放置「Peak point」。兩個範圍設定呼叫會將該座標納入可見範圍。若腳本會建立多張圖,ax.text(x, y, label) 可將文字附加至特定 Axes,清楚指定文字要放在哪張圖上。若只處理目前的單張圖,使用 pyplot 呼叫會更方便。範例中的「Peak point」標籤維持英文。

使用資料座標和座標軸範圍定位文字

預設情況下,text() 的 x 和 y 引數使用資料座標。因此,位於 (3, 25) 的標籤會跟隨圖上的這些數值,而不是依照距離角落的像素位置來定位。目前的 x、y 範圍會決定資料座標平面中哪些部分可見。如果指定位置超出範圍,文字就會位於繪圖區的可見範圍之外。可使用 plt.xlim() 和 plt.ylim() 設定合適的範圍;若使用 Axes 物件,則可呼叫 ax.set_xlim() 和 ax.set_ylim()。

選擇能讓標籤清楚易讀且不遮住重要資料的位置。若希望註記無論資料值如何變化,都固定在 Axes 範圍中的某個比例位置,可透過 transform=ax.transAxes 使用 Axes 座標;(0, 0) 是 Axes 的左下角,(1, 1) 則是右上角。這與預設的資料座標不同,適合用來將說明文字固定在繪圖內部。

自訂文字外觀

將關鍵字引數傳給 text() 即可設定標籤樣式。fontsize 可調整字級,color 可設定文字顏色,而 fontweight="bold" 可加粗文字。設定 rotation 可旋轉文字;使用 horizontalalignment(或 ha)和 verticalalignment(或 va)可調整文字相對於 x、y 座標的位置。例如,ha="center" 和 va="bottom" 會讓標籤置中於資料點上方。

bbox 引數會在文字後方加上背景,讓標籤與繁雜的折線或標記區隔開來。它接受包含圖形屬性的字典。以下簡短範例結合對齊、強調、旋轉和半透明白色方框:

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [2, 4, 3], marker="o")
ax.text(2, 4, "Peak", fontsize=12, color="crimson", fontweight="bold",
        ha="center", va="bottom", rotation=15,
        bbox={"facecolor": "white", "alpha": 0.8})
plt.close(fig)

例如,bbox={"facecolor": "white", "alpha": 0.8} 會建立半透明的白色背景。只使用能提升可讀性的選項;若大量使用鮮豔色彩、大字級或旋轉文字,可能會使視線偏離資料。

新增註解和多行文字

若註記需要指向圖中的特定項目,請使用 plt.annotate()。它的 xy 引數指定註解所描述的資料點,而 xytext 則指定文字位置。例如,plt.annotate("Peak", xy=(3, 25), xytext=(2, 30), arrowprops={"arrowstyle": "->"}) 會在資料點上方放置註記,並畫出指向該點的箭頭。預設情況下,註解文字位置也使用資料座標;請設定範圍,讓目標點和註記都在可見範圍內。若使用 Axes,請呼叫 ax.annotate(),讓目標點和註記隸屬於指定的繪圖。

若要加入多行註記,可在傳給 text() 的字串中加入換行字元,例如 "First line\nSecond line"。Matplotlib 會在指定位置逐行顯示文字。多行標籤適合用來提供簡短說明;請調整其位置和對齊方式,確保文字位於繪圖可見範圍內,且不會遮住附近資料。這些做法可用來新增標籤、補充背景資訊或指示特定項目,並讓每段文字對應至它描述的座標或圖中項目。範例中的「Peak」、「First line」和「Second line」文字維持英文。