1. 程式人生 > >Matplotlib簡單入門學習

Matplotlib簡單入門學習

因為學習機器學習以及試圖通過python實現相應的演算法,因此學習了Matplotlib中的畫圖,那麼就問到,問啥不用matlab呢,答:多一門技術,多一口飯;而且發現Matplotlib的畫圖功能還是蠻強大的,這次僅僅只是學習了以前在MATLAB裡面會的相應的東西,然後學習一下在python中對應的知識。

matplotlib在Python中應用最多的2D影象的繪圖工具包,使用matplotlib能夠非常簡單的視覺化資料。在matplotlib中使用最多的模組就是pyplot。pyplot非常接近Matlab的繪圖實現,而且大多數的命令及其類似Matlab.當然,與Matlab類似,需要很多的數學運算,因此numpy這個元件同樣是必不可少的。所以很多人說python+matplotlib+numpy就是MATLAB。當然在此之前,需要配置好相應的環境,在Linux 14.04下版本,利用sublime Text 3可以非常快捷的搭建好開發環境,可以參見部落格

http://blog.csdn.net/mao19931004/article/details/51834616

首先,在matplotlib建議使用別名,引入包,這樣方便以後模組的使用,一般以以下兩句開始:

import numpy as np
import matplotlib.pyplot as plt

接下來以繪製正弦餘弦函式曲線為例,介紹相應的函式。

  • 使用預設的繪圖屬性繪圖
x=np.linspace(-np.pi,np.pi,256,endpoint=True)
C,S=np.cos(x),np.sin(x)
plt.plot(x,C)
plt.plot(x,S)

  • 對線條的顏色,寬度進行設定,就像在matlab中一樣:
plt.plot(x,C,color='red',linewidth=2.5,linestyle='-')
plt.plot(x,S,color='blue',linewidth=2.5,linestyle='-')

  • plot函式的講解

上面介紹了簡單的繪圖,用的基本上都是plot,因此有必要對plot函式進行簡單的介紹。官網參考網址:plot使用。熟悉Matlab的人對plot不會陌生,在matplotlib中的使用方式大致和Matlab中是一致的,使用plot,可以對點的標記的樣式以及線條的樣式進行設定。

函式的宣告為:matplotlib.pyplot.plot(*args

**kwargs)。args的引數的長度是不定 的,可以設定很多的屬性,kwargs主要是應用於設定線條的屬性。對於標註和線條的樣式,可以通過簡單的字元來表示:

以及標註和線條的顏色:

當然線條的顏色可以以其他方式定製。比如16進位制的字串('#008000')或者是RGB、RGBA元組的方式RGB or RGBA ((0,1,0,1)) 來實現不同的顏色。

在接下來會應用到更多的屬性。對於Line2D的具體細節,也就是線條的屬性等,可以進一步查閱Line2D.

  • 設定橫軸、縱軸的界限以及標註

很多時候,需要設定橫軸和縱軸的介面,從而得到更加清晰明瞭的圖形:

plt.xlim(X.min()*1.1, X.max()*1.1)
plt.ylim(C.min()*1.1, C.max()*1.1)
此外為了更好的表示橫軸和縱軸資料的含義,可以通過ticks對橫軸和縱軸的含義進行設定和定製。
plt.xlim(x.min()*1.1, x.max()*1.1)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
       [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])

plt.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, 0, +1],
       [r'$-1$', r'$0$', r'$+1$'])
看到yticks和xticks後面一串的數字,看到就覺得可能有點不知道寫的什麼,熟悉LaTex的人覺得我們這種想法的人有點傻。其實就是很簡單的字串,但是是為了方便Latex去解析這段字串。一般以r開始,中間的字串用$字串$包圍起來。這裡是matplotlib中的有關LaTex的使用介紹:Latex的使用

上面的\pi代表的意義就是π。以下是有關希臘字元的表示:

最後的顯示影象為:

這樣資料的意義就更加清晰明瞭了。

  • 設定Spines的位置。

Spines are the lines connecting the axis tick marks and noting the boundaries of the data area. They can be placed at arbitrary positions。

Spines應該可以理解為座標軸的位置。但是也不全是,因為它分為上下左右四個位置,就如上圖的四個邊界,那麼左邊界和下邊界就是我們通常認為的橫座標和縱座標。我們可以將上邊界和右邊界隱藏,同時將左邊界和下邊界移動至中心的位置,看看效果:

這樣就和我們通常畫數學曲線的方式就一樣了。

實現的完整程式碼是:

import numpy as np
import matplotlib.pyplot as plt


ax = plt.subplot(111)

ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

x=np.linspace(-np.pi,np.pi,256,endpoint=True)
C,S=np.cos(x),np.sin(x)

plt.plot(x,C,color='red',linewidth=2.5,linestyle='-',label=r'$cos(t)$')
plt.plot(x,S,color='blue',linewidth=2.5,linestyle='-',label=r'$sin(t)$')

plt.xlim(x.min()*1.1, x.max()*1.1)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
       [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])

plt.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, 0, +1],
       [r'$-1$', r'$0$', r'$+1$'])
plt.show()
  • 新增圖例說明

說到作圖,當然必須要有圖例,圖例是幫助我們理解曲線指代的型別,如果讓我們不去仔細分析曲線,就可以知道曲線指代的型別。比如上圖的正弦和餘弦,我們要經過分析過後,才知道紅色是餘弦函式,藍色是正弦函式,因此圖例就非常重要的幫助我們分析圖形。

在畫圖時候,我們需要多線條加上label,這樣才可以在最後將圖例顯示出來。

plt.plot(x,C,color='red',linewidth=2.5,linestyle='-',label=r'$cos(t)$')
plt.plot(x,S,color='blue',linewidth=2.5,linestyle='-',label=r'$sin(t)$')
plt.legend(loc='upper left',frameon=False)

位置的可選引數有:

函式的引數的關鍵字有:

大致的plot的繪圖方式入門就這麼多,當然plot還有很多很多的內容,需要的什麼比較好的方式繪圖,就可以去參閱相關的資料,當然以後如果遇到新的內容,會繼續介紹。