如何在 Matplotlib 中指定圖形座標中的圖例位置

Suraj Joshi 2020年11月7日
如何在 Matplotlib 中指定圖形座標中的圖例位置

我們可以通過設定 loc 引數的值來指定圖例在圖形中的位置。

示例:Matplotlib 在圖形座標中指定圖例位置

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()

輸出:

Matplotlib 在圖形座標中指定圖例位置

這裡,我們有一個有兩個子圖的圖。最上面的子圖將 loc 設定為 best;這就將圖例放置在圖的最佳位置,在此處我們沒有任何內容。

類似的情況也發生在底部的第二個子圖中:圖例被放置在邊界框的左下角位置,覆蓋了整個軸線。邊界框由 bbox_to_anchor 引數指定,其預設值為 (0,0,1,1)

loc 引數可以取以下任意一個值。

best
upper right
upper left
lower left
lower right
right
center left
center right
lower center
upper center
center

這些位置代表圖例相對於 bbox_to_anchor 引數指定的邊界框的位置。

同樣,我們可以通過改變 bbox_to_anchor 引數的值將圖例放置在圖中的任何位置。bbox_to_anchor 引數取一個元組,代表座標,loc 引數指定的角將被放置在那裡。

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 來指定圖例在圖形座標中的位置 Matplotlib

在頂部的子圖中,我們將 bbox_to_anchor 設定為 (0.9,0.75),由子圖上的紅點標示。loc 引數"upper left"的值表示圖例的左上角,放在紅點處。

底部的子圖,bbox_to_anchor 設定為 (0.6,0.4),由圖中底軸的紅點標示。loc 的值設定為"center right";因此,底軸圖例的右邊中心在紅點處。

Author: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相關文章 - Matplotlib Legend