資料文字標註
使用 matplotlib 繪製圖表時,可以使用 text() 或 annotate() 方法,替資料加上文字標註,或新增帶有箭頭的文字標註,這篇教學會介紹添加文字標註的用法。
快速導覽
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
text()
text() 可以在圖表的指定位置,加入文字標註,常用的參數如下:
參數 | 說明 |
---|---|
x | 圖表中的 x 座標。 |
y | 圖表中的 y 座標。 |
s | 要標註的文字。 |
fontdict | 文字設定字典檔,可設定 fontsize 大小、fontweight 粗細、color 顏色...等 ( 參考:完整屬性 )。 |
下方的程式碼執行後,會在圖表的 (2.5,3) 和 (1,3.5) 的位置,分別加入 a1 和 a2 的文字。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
plt.plot(x)
plt.text(2.5,3,'a1',{'fontsize':18})
plt.text(1,3.5,'a2',{'fontsize':18})
plt.show()
如果使用迴圈搭配 text 方法,就能替每個資料點,加上標註說明。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
fig = plt.figure()
plt.plot(x, marker='o', markersize=10)
plt.xlim(-1,5)
plt.ylim(-1,6)
for i in x:
plt.text(i-0.7,i,i,fontsize=20)
plt.show()
annotate()
annotate() 方法和 text() 類似,可以在圖表中加入文字,且更近一步能加入「箭頭線條」,讓資料文字的標註更加完整,常用的參數如下:
參數 | 說明 |
---|---|
text | 要標註的文字。 |
xy | 要標註的資料點 xy 座標,使用 (x, y) 表示。 |
xytext | 要標註的文字 xy 座標,使用 (x, y) 表示。 |
xycoords | 座標系統,預設使用 data 表示資料點的位置 ( 其他可參考:pyplot.annotate )。 |
textcoords | 文字坐標系統,對照 xycoords 使用。 |
arrowprops | 箭頭參數,可設定 width 線條寬度、headlength 箭頭長度、headwidth 箭頭寬度、shrink 線條和文字間距、其他外觀參數設定 ( 參考:FancyArrowPatch )。 |
下面的程式碼執行後,圖表上除了會呈現文字,也會使用箭頭進一步標註。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
plt.plot(x)
plt.annotate('test',
xy=(2.1,3),
xytext=(3,2.8),
arrowprops={
'width':1,
'headlength':8,
'headwidth':10,
'facecolor':'#000',
'shrink':0.05},
fontsize=20)
plt.show()
arrowstyle 箭頭樣式
調整 arrowprops 參數裡 arrowstyle 屬性,可以設定下列幾種箭頭樣式 ( 預設屬性值:ArrowStyle )
類別 | 名稱 | 類別 | 名稱 | |
---|---|---|---|---|
Curve | - | CurveA | <- | |
CurveB | -> | CurveAB | <-> | |
CurveFilledA | <|- | CurveFilledB | -|> | |
CurveFilledAB | <|-|> | BracketA | ]- | |
BracketB | -[ | BracketAB | ]-[ | |
BarAB | |-| | BracketCurve | ]-> | |
CurveBracket | <-[ | Simple | simple | |
Fancy | fancy | Wedge | wedge |
箭頭樣式圖例參考:
下方的程式碼執行後,會產生一個樣式為 fancy,並客製化調整屬性參數的的箭頭。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
plt.plot(x)
plt.annotate('test',
xy=(2,3),
xytext=(3,2),
arrowprops={
'arrowstyle':'fancy, head_width=1, tail_width=1'},
fontsize=20)
plt.show()
connectionstyle 連接彎曲樣式
調整 arrowprops 參數裡 connectionstyle 屬性,可以設定下列幾種連接彎曲樣式 ( 預設屬性值:ConnectionStyle )
類別 | 名稱 |
---|---|
Arc3 | arc3 |
Angle3 | angle3 |
Angle | angle |
Arc | arc |
Bar | bar |
連接彎曲樣式圖例參考:
下方的程式執行後,會產生兩個不同樣式的箭頭標註。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
plt.plot(x)
plt.annotate('t1',
xy=(2,3),
xytext=(3,1.5),
arrowprops={
'arrowstyle':'fancy, head_width=1, tail_width=1',
'connectionstyle':'arc3, rad=-0.5'},
fontsize=20)
plt.annotate('t2',
xy=(2,3),
xytext=(1,4),
arrowprops={
'arrowstyle':'->',
'connectionstyle':'arc3, rad=-0.5'},
fontsize=20)
plt.show()
bbox 參數設定標註樣式
圖表中標註的文字,可以使用 bbox 的參數,設定標註文字的外框樣式,bbox 具有的屬性如下 ( 更多參考:FancyBboxPatch ):
類別 | 名稱 | 預設值 |
---|---|---|
Square | square | pad=0.3 |
Circle | circle | pad=0.3 |
LArrow | larrow | pad=0.3 |
RArrow | rarrow | pad=0.3 |
DArrow | darrow | pad=0.3 |
Round | round | pad=0.3, rounding_size=None |
Round4 | round4 | pad=0.3, rounding_size=None |
Sawtooth | sawtooth | pad=0.3, tooth_size=None |
Roundtooth | roundtooth | pad=0.3, tooth_size=None |
下方的程式執行後,會在圖表上顯示一個黃底紅外框的文字標註,以及一個藍色箭頭的文字標註。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
plt.plot(x)
plt.text(2.5,3,'test',fontsize=20,bbox={
'boxstyle':'round',
'facecolor':'#ff0',
'edgecolor':'#f00',
'pad':0.5,
'linewidth':5})
plt.text(1,4,'test',fontsize=20,rotation=-30,bbox={
'boxstyle':'RArrow',
'facecolor':'#0ff',
'edgecolor':'#00c',
'pad':0.5,
'linewidth':5})
plt.show()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~