1.簡單的折線圖
對於圖表來說,最簡單的莫過於作出一個單一函數的影象。我們首先來介紹建立這種型別圖表。
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
對於所有的 Matplotlib 圖表來說,我們都需要從建立圖形和維度開始。圖形和維度可以使用下面程式碼進行最簡形式的建立:
fig = plt.figure()
ax = plt.axes()
在 Matplotlib 中,圖形(類plt.Figure的一個範例)可以被認為是一個包括所有維度、影象、文字和標籤物件的容器。維度(類plt.Axes的一個範例)就是你上面看到的影象,一個有邊界的格子包括刻度和標籤,最終還有我們畫在上面的圖表元素。在本書中,我們會使用變數名fig來指代圖形物件,以及變數名ax來指代維度變數。
一旦我們建立了維度,我們可以使用ax.plot方法將資料繪製在圖表上。下面是一個簡單的正弦函數圖形:
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x));
同樣的,我們可以使用 pylab 介面(MATLAB 風格的介面)幫我們在後臺自動建立這兩個物件:
plt.plot(x, np.sin(x));
如果我們需要在同一幅圖形中繪製多根線條,只需要多次呼叫plot函數即可:
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x));
這就是在 Matplotlib 中繪製簡單函數影象的所有介面了。下面我們深入瞭解一下控制座標軸和線條外觀的細節。
調整折線圖:線條顏色和風格
你可能第一個想到需要進行調整的部分就是線條的顏色和風格。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') # 16進位制的RRGGBB值
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顏色名稱值
如果沒有指定顏色,Matplotlib 會在一組預設顏色值中迴圈使用來繪製每一條線條。
類似的,通過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=':'); # 點線
如果你喜歡更簡潔的程式碼,這些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'); # 紅色點線
上面的單字母顏色碼是 RGB 顏色系統以及 CMYK 顏色系統的縮寫,被廣泛應用在數位化影象的顏色系統中。
還有很多其他的關鍵字引數可以對摺線圖的外觀進行精細調整;可以通過在 IPython 中使用幫助工具檢視plt.plot()函數的檔案來獲得更多細節內容。
調整折線圖:座標軸範圍
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()(注意:這不是plt.axes()函數,函數名稱是 i 而不是 e)。這個函數可以在一個函數呼叫中就完成 x 軸和 y 軸範圍的設定,傳遞一個[xmin, xmax, ymin, ymax]的列表引數即可:
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');
還可以通過設定’equal’引數設定x軸與y軸使用相同的長度單位:
plt.plot(x, np.sin(x))
plt.axis('equal');
更多關於設定 axis 屬性的內容請查閱plt.axis函數的檔案字串。
折線圖示籤
本節最後介紹一下在折線圖上繪製標籤:標題、座標軸標籤和簡單的圖例。
標題和座標軸標籤是最簡單的這類標籤,Matplotlib 提供了函數用來方便的設定它們:
plt.plot(x, np.sin(x))
plt.title("A Sine Curve")
plt.xlabel("x")
plt.ylabel("sin(x)");
這些標籤的位置、大小和風格可以通過上面函數的可選引數進行設定。參閱 Matplotlib 線上檔案和這些函數的檔案字串可以獲得更多的資訊。
當一幅圖中繪製了多條折線時,如果能夠繪製一個線條對應的圖例能讓圖表更加清晰。Matplotlib 也內建了函數來快速建立圖例。估計你也猜到了,通過plt.legend()函數可以實現這個需求。雖然有很多種正確的方法來指定圖例,作者認為最簡單的方法是通過在繪製每條線條時指定對應的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檔案字串可以獲得更多相關資訊。