Python之Matplotlib數據可視化(一):簡易線形圖(顏色、風格、座標軸、圖像標籤)
在所有圖形中,最簡單的應該就是線性方程 y = f (x) 的可視化了。來看看如何創建這個簡單的線形圖。首先需要導入以下命令:
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
要畫 Matplotlib 圖形時,都需要先創建一個圖形 fig 和一個座標軸 ax 。創建圖形與座標軸的最簡單做法如下所示:
fig = plt.figure()
ax = plt.axes()
plt.show()
在 Matplotlib 裏面,figure( plt.Figure 類的一個實例)可以被看成是一個能夠容納各種座標軸、圖形、文字和標籤的容器。就像在圖中看到的那樣,axes ( plt.Axes 類的一個實例)是一個帶有刻度和標籤的矩形,最終會包含所有可視化的圖形元素。
從一組簡單的正弦曲線(sinusoid)開始:
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x));
plt.show()
如果想在一張圖中創建多條線,可以重複調用 plot 命令:
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x));
plt.show()
1 調整圖形:線條的顏色與風格
1.1 線條顏色
通常對圖形的第一次調整是調整它線條的顏色與風格。 plt.plot() 函數可以通過相應的參數設置顏色與風格。要修改顏色,就可以使用 color 參數
,它支持各種顏色值的字符串。顏色的不同表示方法如下所示:
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顏色名稱
具體線條顏色設置表格如下:
顏色符號 | 說明 |
---|---|
r | 紅色 |
g | 綠色 |
b | 藍色 |
w | 白色 |
c | 青色 |
m | 洋紅 |
y | 黃色 |
k | 黑色 |
如果不指定顏色,Matplotlib 就會爲多條線自動循環使用一組默認的顏色。
1.2 線條風格
與之類似,也可以用 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 + 4, linestyle='-') # 實線
plt.plot(x, x + 5, linestyle='--') # 虛線
plt.plot(x, x + 6, linestyle='-.') # 點劃線
plt.plot(x, x + 7, linestyle=':'); # 實點線
1.3 線條顏色和風格編碼組合
如果你想用一種更簡潔的方式,則可以將 linestyle 和 color 編碼組合起來
,作爲 plt.plot() 函數的一個非關鍵字參數使用:
plt.plot(x, x + 0, '-g') # 綠色實線
plt.plot(x, x + 1, '--c') # 青色虛線
plt.plot(x, x + 2, '-.k') # 黑色點劃線
plt.plot(x, x + 3, ':r'); # 紅色實點線
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
plt.plot(x, x + 0, '-g') # 綠色實線
plt.plot(x, x + 1, '--c') # 青色虛線
plt.plot(x, x + 2, '-.k') # 黑色點劃線
plt.plot(x, x + 3, ':r'); # 紅色實點線
plt.show()
這些單字符顏色代碼是 RGB(Red/Green/Blue)
與CMYK(Cyan/Magenta/Yellow/blacK)
顏色系統中的標準縮寫形式,通常用於數字化彩色圖形。
1.4 線條和標記節點樣式:
- 線條顏色:color=‘g’
- 線條風格:linestyle=’–’
- 線條粗細:linewidth=5.0
- 標記風格:marker=‘o’
- 標記顏色:markerfacecolor=‘b’
- 標記尺寸:markersize=20
- 透明度:alpha=0.5
線條和標記節點格式字符 如果不設置顏色,系統默認會取一個不同顏色來區別線條。
標記字符(mark) | 說明 |
---|---|
o | 實心圈標記 |
. | 點標記 |
, | 像素標記,極小的點 |
v | 倒三角標記 |
^ | 上三角標記 |
> | 右三角標記 |
< | 左三角標記 |
* | 星形標記 |
+ | 十字標記 |
x = np.linspace(0, 10, 1000)
plt.plot(x,
np.sin(x),
marker='o',
markersize=6,
markerfacecolor='r',
linestyle='-.',
linewidth=5,
alpha=0.8
)
還有很多其他用來調整圖像的關鍵字參數。若想了解更多的細節,建議你用 IPython 的幫助工具查看 plt.plot() 函數的程序文檔
2 調整圖形:座標軸上下限
雖然 Matplotlib 會自動爲你的圖形選擇最合適的座標軸上下限,但是有時自定義座標軸上下限可能會更好。調整座標軸上下限最基礎的方法是 plt.xlim()
和 plt.ylim()
。
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
plt.plot(x, np.sin(x))
plt.xlim(-1, 11)
plt.ylim(-1.5, 1.5);
plt.show()
如果你想要讓座標軸逆序顯示,那麼也可以逆序設置座標軸刻度值:
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
plt.plot(x, np.sin(x))
plt.xlim(10, 0)
plt.ylim(1.2, -1.2);
plt.show()
還有一個方法是 plt.axis()
(注意不要搞混 axes 和 axis
)。通過傳入 [xmin, xmax,ymin, ymax]
對應的值, plt.axis() 方法可以讓你用一行代碼設置 x 和 y 的限值。
plt.plot(x, np.sin(x))
plt.axis([-1, 11, -1.5, 1.5]);
plt.axis() 能做的可不止如此,它還可以按照圖形的內容自動收緊座標軸,不留空白區域。
plt.plot(x, np.sin(x))
plt.axis('tight');
你還可以實現更高級的配置,例如讓屏幕上顯示的圖形分辨率爲 1 :1,x 軸單位長度與 y 軸單位長度相等。
plt.plot(x, np.sin(x))
plt.axis('equal');
關於 plt.axis() 方法設置座標軸上下限和其他更多功能,請參考 plt.axis() 的程序文檔。
3 設置圖形標籤
介紹設置圖形標籤的方法:圖形標題
、座標軸標題
、簡易圖例
。
圖形標題與座標軸標題是最簡單的標籤,快速設置方法如下所示:
plt.plot(x, np.sin(x))
plt.title("A Sine Curve")
plt.xlabel("x")
plt.ylabel("sin(x)");
你可以通過優化參數來調整這些標籤的位置、大小和風格。若想獲取更多的信息,請參考Matplotlib 文檔和對應函數的程序文檔。
在單個座標軸上顯示多條線時,創建圖例顯示每條線是很有效的方法。Matplotlib 內置了一個簡單快速的方法,可以用來創建圖例,那就是plt.legend()
。雖然有不少用來設置圖例的辦法,但我覺得還是在 plt.plot 函數中用 label 參數爲每條線設置一個標籤最簡單。
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();
你會發現, plt.legend() 函數會將每條線的標籤與其風格、顏色自動匹配。關於通過 plt.legend() 設置圖例的更多信息,請參考相應的程序文檔。
4 Matplotlib 陷阱
雖然絕大多數的 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');
備註
各位老鐵來個“關注”、“點贊”、“評論”三連擊哦
各位老鐵來個“關注”、“點贊”、“評論”三連擊哦
各位老鐵來個“關注”、“點贊”、“評論”三連擊哦