1. 程式人生 > >matplotlib學習筆記(二)

matplotlib學習筆記(二)

pyplot ax1 inf png 循環 atp 存在 對象 並排

一個繪圖對象(figure)可以包含多個軸(axis),在Matplotlib中用軸表示一個繪圖區域,可以將其理解為子圖。

在(一)中,繪圖對象只包括一個軸,因此只顯示了一個軸(子圖(Axes) ),個人理解一個子圖代表一個軸,可以使用subplot函數快速繪制有多個軸的圖表。

subplot函數的調用形式如下:

subplot(numRows, numCols, plotNum)

subplot將整個繪圖區域等分為numRows行和 numCols列個子區域,然後按照從左到右,從上到下的順序對每個子區域進行編號,左上的子區域的編號為1。

如果numRows,numCols和plotNum這三個數都小於10的話,可以把它們縮寫為一個整數,例如subplot(323)和subplot(3,2,3)是相同的。

subplot在plotNum指定的區域中創建一個軸對象。如果新創建的軸和之前創建的軸重疊的話,之前的軸將被刪除,也就是之前的子圖。

要註意,再多的子圖,仍然歸屬於一個繪圖對象。

subplot()返回它所創建的Axes對象,可以將它用變量保存起來,然後用sca()交替讓它們成為當前Axes對象,並調用plot()在其中繪圖。

如果需要同時繪制多幅圖表,可以給figure()傳遞一個整數參數指定Figure對象的序號,如果序號所指定的figure對象已經存在,將不創建新的對象,而只是讓它成為當前的Figure對象。下面的程序演示了如何依次在不同圖表的不同 子圖中繪制曲線。

import numpy as np
import matplotlib.pyplot as plt

plt.figure(1) # 創建圖表1
plt.figure(2) # 創建圖表2
ax1 = plt.subplot(211) # 在圖表2中創建子圖1
ax2 = plt.subplot(212) # 在圖表2中創建子圖2

x = np.linspace(0, 3, 100)


for i in xrange(5):
	plt.figure(1) # 選擇圖表1
	plt.plot(x, np.exp(i*x/3))
	plt.sca(ax1) # 選擇圖表2的子圖1
	plt.plot(x, np.sin(i*x))
	plt.sca(ax2) # 選擇圖表2的子圖2
	plt.plot(x, np.cos(i*x))
plt.show()

效果

技術分享圖片技術分享圖片

解釋下,首先通過figure()創建了兩個圖表,它們的序號分別為1和2。然後在圖表2中創建了上下 並排的兩個子圖,並用變量ax1和ax2保存。

在循環中,先調用figure(1)讓圖表1成為當前圖表,並在其中繪圖。然後調用sca(ax1) 和sca(ax2)分別讓子圖ax1和ax2成為當前子圖,並在其中繪圖。

當它們成為當前子圖時,包含它們的圖表2也自動成為當前圖表,因此不需要調用figure(2)依次在圖表1和圖表2的兩 個子圖之間切換,逐步在其中添加新的曲線

matplotlib學習筆記(二)