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()

   上圖的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 plt
plt.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 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^')

  控制曲線的屬性

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

  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--')

../_images/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)

../_images/pyplot_text.png

  每個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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM