Matplotlib可視化之添加讓統(tǒng)計圖變得簡單易懂的注釋
一、
在系列博文的中,我們已經(jīng)學習了如何自定義繪圖的顏色和樣式,以使得繪制更加精美、符合審美要求??梢杂肕atplotlib繪制出復雜而又精美的統(tǒng)計圖,但是如果沒有注釋,我們很難讓其他人明白圖中的點、線究竟代表著什么,有什么樣的含義,也就失去了統(tǒng)計圖的意義,為了解決這一問題,Matplotlib提供了大量對圖形進行注釋的方法,這些注釋方法對于所有的繪圖函數(shù)(如plt.plot()、plt.scatter()、plt.histogram()等
)都是通用的,利用這些注釋可以使統(tǒng)計圖變得通俗易懂。
二、添加標題
從最簡單的添加標題開始:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-4, 4, 10005) y = 5 * (x + 4.2) * (x + 4.) * (x - 2.5) plt.title('A polynomial') plt.plot(x, y, c = 'm') plt.show()
Tips:
plt.title()函數(shù)接受一個字符串作為參數(shù)并將其作為整個圖形的標題。
三、為坐標軸添加標簽
在實際應用中,對統(tǒng)計圖坐標軸的適當描述有助于用戶理解圖形所表達的含義。
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 8, 1000) y = 2.0 * x + 0.5 * 5 * x ** 2 plt.title('Acceleration Moving') plt.xlabel('Time') plt.ylabel('distance') plt.plot(x, y, c = 'c') plt.show()
Tips:
使用plt.xlabel()和plt.ylabel()函數(shù)分別為水平軸和垂直軸添加注釋。
四、添加文本說明
雖然我們已經(jīng)學習了如何圖形添加標題,以及為坐標軸添加注釋,但是,很多時候我們還需要在圖形中添加說明文本,來凸顯圖中點或線的重要性。
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 8, 1000) y = 2.0 * x + 0.5 * 5 * x ** 2 plt.title('Acceleration Moving') plt.xlabel('Time') plt.ylabel('distance') plt.scatter(x[0],y[0]) plt.text(x[0], y[0], 'start') plt.plot(x, y, c = 'c') plt.show()
Tips:plt.text()函數(shù)接受要顯示的位置和文本作為參數(shù)。位置以坐標形式給出,其指定了文本框左下角的位置。
五、文本的對齊方式
文本外圍包含隱式文本框(下文會介紹文本框的顯示方法),此框用于將文本與傳遞給plt.text()
的坐標進行相對對齊。使用verticalalignment
和horizontalalignment
參數(shù)(它們分別可以簡寫為va
和ha
)控制對齊的方式。
垂直對齊選項如下所示:
參數(shù)值 | 說明 |
---|---|
center | 參數(shù)坐標相對于文本框的中心 |
top | 參數(shù)坐標相對于文本框的上側(cè) |
bottom | 參數(shù)坐標相對于文本框的底部 |
baseline | 參數(shù)坐標相對于文本的基線 |
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 8, 1000) y = 2.0 * x + 0.5 * 5 * x ** 2 x_b = np.linspace(0, 8, 1000) y_b = np.zeros_like(x_b) plt.title('Acceleration Moving') plt.xlabel('Time') plt.ylabel('distance') plt.scatter(x[0],y[0]) plt.text(0, 0, 'center', va='center') plt.text(2, 0, 'top', va='top') plt.text(4, 0, 'bottom', va='bottom') plt.text(6, 0, 'baseline', va='baseline') plt.plot(x, y, c = 'c') plt.plot(x_b, y_b, c = 'm') plt.show()
水平對齊選項如下所示:
參數(shù)值 | 說明 |
---|---|
center | 參數(shù)坐標相對于文本框的中心 |
left | 參數(shù)坐標相對于文本框的左側(cè) |
right | 參數(shù)坐標相對于文本框的右側(cè) |
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 8, 1000) y = 2.0 * x + 0.5 * 5 * x ** 2 y_b = np.linspace(0, 100, 1000) x_b = np.zeros_like(y_b) plt.title('Acceleration Moving') plt.xlabel('Time') plt.ylabel('distance') plt.scatter(x[0],y[0]) plt.text(0, 0, 'center', ha='center') plt.text(0, 50, 'left', ha='left') plt.text(0, 100, 'right', ha='right') plt.plot(x, y, c = 'c') plt.plot(x_b, y_b, c = 'm') plt.show()
六、文本邊界框
上文介紹了文本外圍包含隱式文本框,為了可以顯式的繪制文本框,plt.plot()
支持一個以字典為輸入的bbox
參數(shù),此詞典用于定義文本框的外觀配置:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 8, 1000) y = 2.0 * x + 0.5 * 5 * x ** 2 box = { 'facecolor': '.75', 'edgecolor': 'r', 'boxstyle': 'round' } plt.title('Acceleration Moving') plt.text(0, 8, 'start', bbox=box) plt.plot(x, y, c = 'c') plt.show()
bbox參數(shù)的字典定義包含以下常見鍵值對:
鍵 | 說明與可選值 |
---|---|
facecolor | 用于設置文本框背景和邊的顏色 |
edgecolor | 用于設置文本框邊緣的顏色 |
alpha | 用于設置透明度級別,使文本框與背景更好的混合 |
boxstyle | 設置文本框的樣式,可選值包括"round"和"square" |
pad | 如果"boxstyle"設置為"square",則它定義文本和文本框邊之間的填充量 |
七、添加箭頭
添加文本框當然可以幫助注釋圖形,但有時當說明文本過多,并不能清楚的說明究竟與圖形的那一部分相對應,因此要說明圖形中的特定部分,沒有什么比使用箭頭更好的了,Matplotlib使用plt.annotate()函數(shù)繪制箭頭。
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 8, 1000) y = 2.0 * x + 0.5 * 5 * x ** 2 plt.annotate('start', ha = 'center', va = 'bottom', xytext = (2, 30.), xy = (0, 0), arrowprops = { 'facecolor' : 'black', 'shrink' : 0.05 }) plt.title('Acceleration Moving') plt.plot(x, y, c = 'c') plt.show()
Tips:plt.annotate()函數(shù)在顯示與plt.text()作用相同的說明文本文本外,同時也會渲染箭頭。要顯示的說明文本是第一個參數(shù);xy參數(shù)指定箭頭的目標;xytext參數(shù)指定文本位置,同樣可以通過ha和va參數(shù)來改變文本對齊方式
箭頭的樣式由傳遞給arrowprops
參數(shù)的字典控制,其中常用的鍵值包括:
鍵 | 說明與可選值 |
---|---|
arrowstyle | 控制箭頭的樣式,可選值包括"<-"、"<"、“wedge”、"simple"和"fancy"等 |
facecolor | 用于設置箭頭背景和邊的顏色 |
edgecolor | 用于設置箭頭邊的顏色 |
alpha | 用于設置透明度級別,使箭頭與背景更好的混合 |
收縮參數(shù)控制箭頭端點和箭頭本身之間的間隙。
八、添加圖例
在復雜圖形中,往往包含大量不同的曲線和點,如果這些曲線和點沒有相應的圖例,將無法對其進行準確的區(qū)分,因此圖例在實踐中是必不可少的。
使用plt.legend()
函數(shù)以及繪圖函數(shù)的label可選參數(shù),可以添加圖例:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 6, 1024) data = np.random.standard_normal((150, 2)) print(data.size) y_1 = np.sin(x) y_2 = np.cos(x) plt.xlabel('x') plt.ylabel('y') plt.plot(x, y_1, c = 'm', lw = 3., label = 'sin(x)') plt.plot(x, y_2, c = 'c', lw = 3., ls = '--', label = 'cos(x)') plt.scatter(data[:,0],data[:,1],c='y', label = 'random') plt.legend() plt.show()
Tips:
每個plt繪圖函數(shù)(如plt.plot()、plt.scatter()等)都有一個可選的label參數(shù)來命名圖形的元素。plt.legend()函數(shù)的作用是呈現(xiàn)圖例,圖例是根據(jù)標簽自動生成的。
plt.legend()
函數(shù)包含可選參數(shù)來控制圖例的呈現(xiàn):
參數(shù) | 說明與可選值 |
---|---|
loc | 用于控制圖例的位置,默認值為"best",將以適合的方式自動放置圖例,其他可選值包括"upper left"、“l(fā)ower left”、“l(fā)ower right”、“right”、“center left”、“center right”、“l(fā)ower center”、“upper center"和"center” |
shadow | 可選值包括True和False,用于設置是否使用陰影效果呈現(xiàn)圖例 |
fancybox | 可選值包括True和False,用于是否使用圓角框呈現(xiàn)圖例 |
title | 用于為圖例設置標題 |
ncol | 強制設置圖例的列數(shù) |
九、使用LaTex風格的符號
我們已經(jīng)學習了為圖形添加多種注釋的方法。然而,在實踐中,我們通常需要使用數(shù)學符號,因此,我們需要使用LaTex語法來添加數(shù)字符號。
要使用LaTex風格的符號,首先需要在計算機上安裝可用的LaTeX配置,以便Matplotlib可以解釋LaTeX語法來呈現(xiàn)數(shù)學文本。有關于安裝LaTeX的方法,不在本文的主題主題,大家可以根據(jù)自己的操作系統(tǒng)檢索安裝方法.
十、LaTex簡介
LaTex是學術界廣泛使用的一種文獻排版系統(tǒng)。與Microsoft Word等文檔編輯器不同,LaTeX用戶在編輯文檔時無法看到其最終顯示效果。文檔被描述為純文本文檔中存儲的文本及命令。最終,LaTeX將解釋文檔以進行呈現(xiàn)。在科學和工程界,LaTeX的公式語言通常用于在電子郵件和論壇中編寫數(shù)學文本。
十一、使用LaTex符號示例
使用LaTex風格的符號時,函數(shù)接受的字符串參數(shù)值以“$”字符開頭和結(jié)尾,這是向Matplotlib發(fā)出信號,以將文本解釋并呈現(xiàn)為LaTeX樣式的數(shù)學文本。字符串的內(nèi)容就是數(shù)學文本的標準語言,關于Matplotlib中LaTeX樣式的數(shù)學文本的介紹,可以參考Matplotlib官網(wǎng)。
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-4, 4, 10005) y = 3 / 5 * (x + 4.2) * (x + 4.) * (x - 2.5) plt.title('$f(x)=\\frac{3}{5}(x+4.4)(x+4)(x-2.5)$') plt.plot(x, y, c = 'k') plt.show()
Tips:這種LaTex風格的符號不限于標題,它可以用于任何其它注釋。LaTeX語言在很大程度上依賴于轉(zhuǎn)義字符\,但此符號恰好也是Python的字符串轉(zhuǎn)義字符。因此,如果要在一個LaTeX文本中使用\作為轉(zhuǎn)移字符,需要在Python字符串中使用兩個\。為了避免漏掉轉(zhuǎn)義字符,可以在字符串前面加上r,這樣就不需要任何轉(zhuǎn)義字符了,即:"$f(x)=\\frac{1}{4}(x+4)(x+1)(x-2)$"等價于r'$f(x)=\frac{1}{4}(x+4)(x+1)(x-2)$'。
十二、使用中文字符
中文是使用Matplotlib的一個痛點,但是在實際應用中,又不可避免的會使用到中文用于統(tǒng)計圖注釋的顯示,如果不進行配置,會將中文字符顯示為亂碼。
使用中文字符作為注釋有多種方式,這里本著簡單就是最優(yōu)的理念,使用plt.rcParams['font.sans-serif']
進行設置:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 6, 1024) data = np.random.standard_normal((150, 2)) y_1 = np.sin(x) y_2 = np.cos(x) plt.xlabel('x軸') plt.ylabel('y軸') plt.title('中文字符使用示例') plt.plot(x, y_1, c = 'm', lw = 3., label = '正弦函數(shù)') plt.plot(x, y_2, c = 'c', lw = 3., ls = '--', label = '余弦函數(shù)') plt.scatter(data[:,0],data[:,1],c='y', label = '隨機點') plt.rcParams['font.sans-serif'] = ['SimSun'] plt.legend() plt.show()
Tips:使用plt.rcParams['font.sans-serif']設定支持中文字符的字體,使用中文字符的用法范圍與LaTex風格的符號一樣,它可以用于所有注釋,另外需要確保系統(tǒng)支持所設定的中文字符字體。
系列鏈接
學會Python-Matplotlib可視化,快速完成數(shù)據(jù)分析(1)
一文詳解常見統(tǒng)計圖的繪制學會Python-Matplotlib可視化,快速完成數(shù)據(jù)分析(2)
到此這篇關于Matplotlib可視化之添加讓統(tǒng)計圖變得簡單易懂的注釋的文章就介紹到這了,更多相關Matplotlib可視化內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持本站!
版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。