HOWTO · Matplotlib
如何在 Matplotlib 中指定圖形座標中的圖例位置
本文向大家介紹如何在 Matplotlib 中指定圖例在圖形中的位置。
本頁內容
若要設定 Matplotlib 圖例的位置,可將 loc 參數設為標準位置,例如 "upper left" 或 "lower right"。若要將圖例放在特定座標,可搭配 loc 與 bbox_to_anchor:bbox_to_anchor 提供錨點座標,而 loc 決定與錨點對齊的圖例位置。Matplotlib 預設的 borderaxespad 會留下一小段間距,因此圖例的可見位置可能稍微偏離指定座標;若要精確對齊,請設定 borderaxespad=0。
範例:使用 loc 與 bbox_to_anchor 設定 Matplotlib 圖例位置
以下範例建立兩個座標軸,並分別為它們設定圖例。第一個座標軸使用 best,第二個使用 lower left。你可以修改這些值,看看標準位置如何套用到自己的繪圖資料。圖中呈現繪製結果;程式碼則顯示可調整的設定。
import matplotlib.pyplot as plt
x = [1, 2, 3]
y1 = [0.5 * i + 1 for i in x]
y2 = [2 * i + 1 for i in x]
fig, ax = plt.subplots(2, 1)
ax[0].plot(x, y1, "b-", label="0.5x+1")
ax[0].plot(x, y2, "g-", label="2x+1")
ax[0].legend(loc="best")
ax[1].plot(x, y1, "b-", label="0.5x+1")
ax[1].plot(x, y2, "g-", label="2x+1")
ax[1].legend(loc="lower left")
plt.tight_layout()
plt.show()
loc 參數可接受以下值:best、upper right、upper left、lower left、lower right、right、center left、center right、lower center、upper center 和 center:
best |
upper right |
upper left |
lower left |
lower right |
right |
center left |
center right |
lower center |
upper center |
center |
使用標準位置時,loc 會在座標軸內定位圖例。設為 best 時,Matplotlib 會依繪圖內容選擇位置;像 lower left 這類具名值則可讓你直接指定位置。如果圖例遮住重要的線條或標記,可以改用清單中的其他值。這些選項指定的是圖例相對於所屬座標軸的位置,而不是相對於整張圖的位置。
若要依座標定位,bbox_to_anchor 會提供錨點座標,而 loc 則決定圖例的哪個位置與錨點對齊。下一個範例中的錨點座標,都是相對於各自的座標軸指定。紅色標記使用 ax.transAxes 畫在相同座標,因此錨點一目瞭然。兩個座標軸使用不同的 loc 值,示範對齊的圖例位置如何改變。使用預設的 borderaxespad 時,圖例會與紅色標記稍微隔開;標記仍指出錨點座標。
import matplotlib.pyplot as plt
x = [1, 2, 3]
y1 = [0.5 * i + 1 for i in x]
y2 = [2 * i + 1 for i in x]
fig, ax = plt.subplots(2, 1)
ax[0].plot(x, y1, "b-", label="Plot-1")
ax[0].plot(x, y2, "g-", label="Plot-2")
ax[0].legend(loc="upper left", bbox_to_anchor=(0.9, 0.75))
ax[0].scatter((0.9), (0.75), s=70, c="red", transform=ax[0].transAxes)
ax[1].plot(x, y1, "b-", label="Plot-1")
ax[1].plot(x, y2, "g-", label="Plot-2")
ax[1].legend(loc="center right", bbox_to_anchor=(0.6, 0.4))
ax[1].scatter((0.6), (0.4), s=70, c="red", transform=ax[1].transAxes)
plt.tight_layout()
plt.show()
在上方的座標軸中,bbox_to_anchor=(0.9, 0.75) 會將錨點設在紅色標記的位置。由於 loc="upper left",圖例的左上角會對齊該錨點,但預設的 borderaxespad 會留下些微可見間距。在下方的座標軸中,錨點是 (0.6, 0.4),且 loc="center right",因此圖例的右側中央會以相同的間距效果對齊下方的紅色標記。若要讓任一指定位置與標記完全重合,請在該座標軸的 legend 呼叫中加入 borderaxespad=0。
若要調整任一位置,先選擇相對於相關座標軸的 x、y 座標,再設定相符的 bbox_to_anchor 元組,並在調整繪圖時標出該點。接著選擇要與該點對齊的圖例位置 loc。這兩項設定會共同作用:只改變錨點會移動與它對齊的圖例位置;改變 loc 則會改變圖例上與錨點對齊的位置。每個標記的轉換都應綁定到與其圖例相同的座標軸,讓視覺參照使用同一個座標空間。保留預設的 borderaxespad 可留下些微間距;在 legend 呼叫中設定 borderaxespad=0 則可讓標記與圖例精確對齊。此範例沒有顯示主控台輸出;上方的圖呈現繪製結果。