本文主要翻譯自matplotlib官網
matplotlib.pyplot是一些命令列風格函數的集合,使matplotlib以類似於MATLAB的方式工作。每個pyplot函數對一幅圖片(figure)做一些改動:比如建立新圖片,在圖片建立一個新的作圖地區(plotting area),在一個作圖地區內畫直線,給圖添加標籤(label)等。matplotlib.pyplot是有狀態的,亦即它會儲存當前圖片和作圖地區的狀態,新的作圖函數會作用在當前圖片的狀態基礎之上。
import matplotlib.pyplot as pltplt.plot([1,2,3,4])plt.ylabel('some numbers')plt.show()
的X座標是1-3,縱座標是1-4,這是因為如果你只提供給plot()函數一個列表或數組,matplotlib會認為這是一串Y值(Y向量),並且自動產生X值(X向量)。而Python一般是從0開始計數的,所以X向量有和Y向量一樣的長度(此處是4),但是是從0開始,所以X軸的值為[0,1,2,3]。
如果要顯示的制定X軸的座標,可以像如下一樣:
plt.plot([1,2,3,4],[1,4,9,16])
也可以給plt.plot()函數傳遞多個序列(元組或列表),每兩個序列是一個X,Y向量對,在圖中構成一條曲線,這樣就會在同一個圖裡存在多條曲線。
為了區分同一個圖裡的多條曲線,可以為每個X,Y向量對指定一個參數來標明該曲線的表現形式,預設的參數是'b-',亦即藍色的直線,如果想用紅色的圓點來表示這條曲線,可以:
import matplotlib.pyplot as pltplt.plot([1,2,3,4],[1,4,9,16],'ro')plt.axis([0,6,0,20])
axis()函數接受形如[xmin,xmax,ymin,ymax]的參數,指定了X,Y軸座標的範圍。
matplotlib不僅僅可以使用序列(列表和元組)作為參數,還可以使用numpy數組。實際上,所有的序列都被內在的轉化為numpy數組。
import numpy as npimport matplotlib.pyplot as pltt=np,arange(0.,5.,0.2)plt.plot(t,t,'r--',t,t**2,'bs',t,t**3,'g^')
控制曲線的屬性
曲線有許多我們可以設定的性質:曲線的寬度,虛線的風格,消除鋸齒等等。有多種設定曲線屬性的方法:
1.使用關鍵詞參數:
plt.plot(x,y,linewidth=2.0)
2.使用Line2D執行個體的設定(Setter)方法。plot()返回的是曲線的列表,比如line1,line2=plot(x1,y1,x2,y2).我們取得plot()函數返回的曲線之後用Setter方法來設定曲線的屬性。
line,=plt.plot(x,y,'-')line.set)antialliased(False) #關閉消除鋸齒
3.使用setp()命令:
lines=plt.plot(x1,y1,x2,y2)plt.setp(lines,color='r',linewidth=2.0)plt.setp(lines,'color','r','linewidth','2.0')
處理多個圖和Axe
MATLAB和pyplot都有當前圖和當前axe的概念。所有的作圖命令都作用在當前axe。
函數gca()返回當前axe,gcf()返回當前圖。
import numpy as npimport matplotlib.pyplot as pltdef f(t): return np.exp(-t) * np.cos(2*np.pi*t)t1 = np.arange(0.0, 5.0, 0.1)t2 = np.arange(0.0, 5.0, 0.02)plt.figure(1)plt.subplot(211)plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')plt.subplot(212)plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
figure()命令是可選的,因為figure(1)會被預設建立,subplot(111)也會被預設建立。subplot()命令會指定numrows,numcols,fignum,其中fignum的取值範圍為從1到numrows*numcols。如果numrows*numcols小於10則subplot()命令中的逗號是可選的。所以subplot(2,1,1)與subplot(211)是完全一樣的。
如果你想手動放置axe,而不是放置在矩形方格內,則可以使用axes()命令,其中的參數為axes([left,bottom,width,height]),每個參數的取值範圍為(0,1)。
你可以使用多個figure()來建立多個圖,每個圖都可以有多個axe和subplot:
import matplotlib.pyplot as pltplt.figure(1) # the first figureplt.subplot(211) # the first subplot in the first figureplt.plot([1,2,3])plt.subplot(212) # the second subplot in the first figureplt.plot([4,5,6])plt.figure(2) # a second figureplt.plot([4,5,6]) # creates a subplot(111) by defaultplt.figure(1) # figure 1 current; subplot(212) still currentplt.subplot(211) # make subplot(211) in figure1 currentplt.title('Easy as 1,2,3') # subplot 211 title
你可以使用clf()和cla()命令來清空當前figure和當前axe。
如果你建立了許多圖,你需要顯示的使用close()命令來釋放該圖所佔用的記憶體,僅僅關閉顯示在螢幕上的圖是不會釋放記憶體空間的。
處理文本
text()命令可以用來在任意位置上添加文本,xlabel(),ylabel(),title()可以用來在X軸,Y軸,標題處添加文本。
import numpy as npimport matplotlib.pyplot as pltmu, sigma = 100, 15x = mu + sigma * np.random.randn(10000)# the histogram of the datan, bins, patches = plt.hist(x, 50, normed=1, facecolor='g', alpha=0.75)plt.xlabel('Smarts')plt.ylabel('Probability')plt.title('Histogram of IQ')plt.text(60, .025, r'$\mu=100,\ \sigma=15$')plt.axis([40, 160, 0, 0.03])plt.grid(True)
每個text()命令都會返回一個matplotlib.text.Text執行個體,就像之前處理曲線一樣,你可以通過使用setp()函數來傳遞關鍵詞參數來定製文本的屬性。
t=plt.xlabel('my data',fontsize=14,color='red')
在文本中使用數學運算式
matplotlib在任何文本中都接受Text運算式。
Tex運算式是有兩個dollar符號環繞起來的,比如的Tex運算式如下
plt.title(r'$\sigma_i=15$')
參考文獻:
[1] Pyplot Tutorial