三、簡易線形圖
所有圖形中,最簡單的應該就是線性方程 的可視化了。
- 要畫Matplotlib圖形時,需要先創建一個圖形
fig
和一個座標軸ax
figure
(plt.Figure
類的一個實例)可以被看成是一個能夠容納各種座標軸、圖形、文字和標籤的容器axes
(plt.Axes
類的一個實例)是一個帶有刻度和標籤的矩形,最終會包含所有可視化的圖形元素- 通常會用變量
fig
表示一個圖形實例,用變量ax
表示一個座標軸實例或一組座標軸實例
fig = plt.figure()
ax = plt.axes()
2. 創建好座標軸後,就可以用ax.plot
畫圖了(也可以用pylab
接口畫圖,這時圖形與座標軸都在底層執行)
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x))
plt.plot(x, np.sin(x))
3. 如果想在一張圖中創建多條線,可以重複調用plot
命令
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
(一)調整圖形:線條的顏色與風格
通常對圖形的第一次調整是調整它線條的顏色和風格,plt.plot()
函數可以通過相應的參數設置。
- 修改顏色:使用
color
參數(如果不指定顏色,Matplotlib會爲多條線自動循環使用一組默認的顏色)
# 顏色設置
plt.plot(x, np.sin(x - 0), color='blue') # 標準顏色名稱
plt.plot(x, np.sin(x - 1), color='g') # 縮寫顏色代碼(rgbcmyk)
plt.plot(x, np.sin(x - 2), color='0.75') # 範圍在0~1的灰度值
plt.plot(x, np.sin(x - 3), color='#FFDD44') # 十六進制(RRGGBB, 00~FF)
plt.plot(x, np.sin(x - 4), color=(1.0,0.2,0.3)) # RGB元組,範圍在0~1
plt.plot(x, np.sin(x - 5), color='chartreuse') # HTML顏色名稱
- 調整線條風格:
linestyle
參數
# 調整線條風格
plt.plot(x, x + 0, linestyle='solid')
plt.plot(x, x + 1, linestyle='dashed')
plt.plot(x, x + 2, linestyle='dashdot')
plt.plot(x, x + 3, linestyle='dotted')
風格簡寫形式
# 簡寫形式
plt.plot(x, x + 0, linestyle='-') # 實線
plt.plot(x, x + 1, linestyle='--') # 虛線
plt.plot(x, x + 2, linestyle='-.') # 點劃線
plt.plot(x, x + 3, linestyle=':') # 實點線
- 更簡潔方式:將
linestyle
與color
編碼組合起來,作爲plt.plot()
函數的一個非關鍵字參數使用
# linestyle與color編碼組合使用
plt.plot(x, x + 0, '-g') # 綠色實線
plt.plot(x, x + 1, '--c') # 青色虛線
plt.plot(x, x + 2, '-.k') # 黑色點劃線
plt.plot(x, x + 3, ':r') # 紅色實點線
- 單字符顏色代碼是RGB(Red/Green/Blue)與CMYK(Cyan/Magenta/Yellow/blacK)顏色系統中的標準縮寫形式,通常用於數字化彩色圖形
- 更多詳見:Specifying Colors - Matplotlib 3.2.1 documentation
(二)調整圖形:座標軸上下限
Matplotlib會自動爲圖形選擇最合適的座標軸上下限,但有時自定義座標軸上下限會更好。
- 調整座標軸上下限最基礎的方法是
plt.xlim()
和plt.ylim()
plt.plot(x, np.sin(x))
plt.xlim(-1, 11)
plt.ylim(-1.5, 1.5)
- 座標軸逆序顯示:可以逆序設置座標軸刻度值
plt.plot(x, np.sin(x))
plt.xlim(10, 0)
plt.ylim(1.2, -1.2)
- 調整座標軸上下限另一個方法
plt.axis()
,通過傳入[xmin, xmax, ymin, ymax]
對應的值,plt.axis()
方法可以用一行代碼設置x和y的限值
plt.plot(x, np.sin(x))
plt.axis([-1, 11, -1.5, 1.5])
(1) 設置:按照圖形內容自動收緊座標軸,不留空白區域
plt.plot(x, np.sin(x))
plt.axis('tight')
(2) 設置:屏幕顯示圖形分辨率爲1:1,x軸單位長度與y軸單位長度相等
plt.plot(x, np.sin(x))
plt.axis('equal')
(三)設置圖形標籤
設置圖形標籤的方法:圖形標題、座標軸標題、簡易圖例。
圖形標題與座標軸標題是最簡單的標籤,可以通過優化參數來調整標籤的位置、大小和風格。
plt.plot(x, np.sin(x))
plt.title("A Sine Curve")
plt.xlabel("x")
plt.ylabel("sin(x)")
在單個座標軸上顯示多條線時,創建圖例顯示每條線是很有效的方法:
plt.plot()
函數中用label
參數爲每條線設置一個標籤plt.legend()
將每條線的標籤與其風格、顏色自動匹配
plt.plot(x, np.sin(x), '-g', label='sin(x)')
plt.plot(x, np.cos(x), ':b', label='cos(x)')
plt.axis('equal')
plt.legend()
更多詳見:Matplotlib 3.2.1 documentation:
(四)Matplotlib陷阱:plt函數與ax方法之間轉換
雖然絕大多數plt
函數都可以直接轉換成ax
方法(如plt.plot() -> ax.plot()
, plt.legend() -> ax.legend()
等),
但並非所有命令都可以這樣用。尤其是設置座標軸上下限、座標軸標題和圖形標題的函數,大都略有差別。
一些MATLAB風格的方法和麪向對象方法轉換:
plt.xlabel() -> ax.set_xlabel()
plt.ylabel() -> ax.set_ylabel()
plt.xlim() -> ax.set_xlim()
plt.ylim() -> ax.set_ylim()
plt.title() -> ax.set_title()
在用面向對象接口畫圖時,不需要單獨調用這些函數,通常採用ax.set()
方法一次性設置所有的屬性是更簡便的方法。
ax = plt.axes()
ax.plot(x, np.sin(x))
ax.set(xlim=(0, 10), ylim=(-2, 2),
xlabel='x', ylabel='sin(x)',
title='A Simple Plot')
Matplotlib 相關閱讀:
[Python3] Matplotlib —— (一) 入門基礎
總結自《Python數據科學手冊》