matplotlib----繪製精美的圖表
matplotlib是python最著名的繪相簿,它提供了一整套和matlab相似的命令API,十分適合互動式地進行製圖。而且也可以方便地將它作為繪圖控制元件,嵌入GUI應用程式中。
1. 快速繪圖
matplotlib的pyplot子庫提供了和matlab類似的繪圖API,方便使用者快速繪製2D圖表。讓我們先來看一個簡單的例子,程式如下:
# -*- coding: utf-8 -*-
import numpy as np #匯入函式庫
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000) #建立陣列
y = np.sin (x)
z = np.cos(x**2)
plt.figure(figsize=(8,4)) #呼叫figure建立繪畫影象
#呼叫plot函式,指定曲線名字、顏色、曲線寬度
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,z,"b--",label="$cos(x^2)$")
plt.xlabel("Time(s)") #設定x軸文字
plt.ylabel("Volt") #設定y軸文字
plt.title("PyPlot First Example") #設定圖示標題
plt.ylim(-1.2,1.2 ) #設定y軸範圍
plt.legend() #顯示圖示
plt.show() #顯示建立的所有繪圖物件
將程式儲存為pyplot.py檔案,執行結果如下:
2. 繪製多軸圖
一個繪圖物件(figure)可以包含多個軸(axis),在Matplotlib中用軸表示一個繪圖區域,可以將其理解為子圖。上面的第一個例子中,繪圖物件只包括一個軸,因此只顯示了一個軸(子圖)。我們可以使用subplot函式快速繪製有多個軸的圖表。subplot函式的呼叫形式如下:
subplot(numRows, numCols, plotNum)
subplot將整個繪圖區域等分為numRows行 * numCols列個子區域,然後按照從左到右,從上到下的順序對每個子區域進行編號,左上的子區域的編號為1。subplot在plotNum指定的區域中建立一個軸物件。如果新建立的軸和之前建立的軸重疊的話,之前的軸將被刪除。
下面的程式建立3行2列共6個軸,通過axisbg引數給每個軸設定不同的背景顏色。
for idx, color in enumerate("rgbyck"):
plt.subplot(320+idx+1, axisbg=color)
plt.show()
結果如下:
如果希望某個軸佔據整個行或者列的話,可以如下呼叫subplot:
plt.subplot(221) # 第一行的左圖
plt.subplot(222) # 第一行的右圖
plt.subplot(212) # 第二整行
plt.show()
結果如下:
當繪圖物件中有多個軸的時候,可以通過工具欄中的Configure Subplots按鈕,互動式地調節軸之間的間距和軸與邊框之間的距離。如果希望在程式中調節的話,可以呼叫subplots_adjust函式,它有left, right, bottom, top, wspace, hspace等幾個關鍵字引數,這些引數的值都是0到1之間的小數,它們是以繪圖區域的寬高為1進行正規化之後的座標或者長度。