Python matplotlib簡介 Pyplot教程

本文主要翻譯自matplotlib官網

 matplotlib.pyplot是一些命令行風格函數的集合,使matplotlib以類似於MATLAB的方式工作。每個pyplot函數對一幅圖片(figure)做一些改動:比如創建新圖片,在圖片創建一個新的作圖區域(plotting area),在一個作圖區域內畫直線,給圖添加標籤(label)等。matplotlib.pyplot是有狀態的,亦即它會保存當前圖片和作圖區域的狀態,新的作圖函數會作用在當前圖片的狀態基礎之上。

import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()

2012120721075365.png

  上圖的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])

2012120721165892.png

 也可以給plt.plot()函數傳遞多個序列(元組或列表),每兩個序列是一個X,Y向量對,在圖中構成一條曲線,這樣就會在同一個圖裏存在多條曲線。

 爲了區分同一個圖裏的多條曲線,可以爲每個X,Y向量對指定一個參數來標明該曲線的表現形式,默認的參數是'b-',亦即藍色的直線,如果想用紅色的圓點來表示這條曲線,可以:

import matplotlib.pyplot as plt
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.axis([0,6,0,20])

2012120721250472.png

 axis()函數接受形如[xmin,xmax,ymin,ymax]的參數,指定了X,Y軸座標的範圍。

 matplotlib不僅僅可以使用序列(列表和元組)作爲參數,還可以使用numpy數組。實際上,所有的序列都被內在的轉化爲numpy數組。

import numpy as np
import matplotlib.pyplot as plt
t=np,arange(0.,5.,0.2)
plt.plot(t,t,'r--',t,t**2,'bs',t,t**3,'g^')

2012120721304035.png

控制曲線的屬性

 曲線有許多我們可以設置的性質:曲線的寬度,虛線的風格,抗鋸齒等等。有多種設置曲線屬性的方法:

 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 np
import matplotlib.pyplot as plt

def 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--')
複製代碼

../_p_w_picpaths/pyplot_two_subplots.png

 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 plt
plt.figure(1)                # the first figure
plt.subplot(211)             # the first subplot in the first figure
plt.plot([1,2,3])
plt.subplot(212)             # the second subplot in the first figure
plt.plot([4,5,6])


plt.figure(2)                # a second figure
plt.plot([4,5,6])            # creates a subplot(111) by default

plt.figure(1)                # figure 1 current; subplot(212) still current
plt.subplot(211)             # make subplot(211) in figure1 current
plt.title('Easy as 1,2,3')   # subplot 211 title
複製代碼

 你可以使用clf()和cla()命令來清空當前figure和當前axe。

 如果你創建了許多圖,你需要顯示的使用close()命令來釋放該圖所佔用的內存,僅僅關閉顯示在屏幕上的圖是不會釋放內存空間的。

處理文本

 text()命令可以用來在任意位置上添加文本,xlabel(),ylabel(),title()可以用來在X軸,Y軸,標題處添加文本。

複製代碼
import numpy as np
import matplotlib.pyplot as plt

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

# the histogram of the data
n, 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)
複製代碼

../_p_w_picpaths/pyplot_text.png

 每個text()命令都會返回一個matplotlib.text.Text實例,就像之前處理曲線一樣,你可以通過使用setp()函數來傳遞關鍵詞參數來定製文本的屬性。

t=plt.xlabel('my data',fontsize=14,color='red')

 在文本中使用數學表達式

 matplotlib在任何文本中都接受Text表達式。

 Tex表達式是有兩個dollar符號環繞起來的,比如math-4cd9a23707.png的Tex表達式如下

plt.title(r'$\sigma_i=15$')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章