文章出處

最近要花一些圖,本來是打算用matlab的,但是matlab有時候莫名其妙的掛掉,忍受不了,便找到了matplotlib。我熟悉并且喜歡Python,所以matplotlib替代了matlab。

使用了幾天,感覺還好,不過覺得文檔不夠全,網頁版的有些鏈接打不開,pdf版本內容也就那么多,很多想找的內容都找不到,于是去看源碼。下面整理一些使用心得。主要是用到matplotlib里面的pyplot和與其相關的。
先看簡單的,畫一張簡單的函數曲線圖,

#導入pyplot,文檔里面的例子通常將其別名為plt
import matplotlib.pyplot as plt
#創建一幅圖
plt.figure()
#畫出曲線
plt.plot(x,y)
#顯示
plt.show()

通常,除了要把曲線顯示出來,還會有其他的要求,比如坐標軸的標注,圖的大小,標題,圖例,畫多條曲線在一張圖里,畫多張子圖在一張圖里,類似與matlab里面的subplot,等。下面一點一點的介紹。

首先看plt.figure(),這個是創建一幅圖,可以沒有參數,但是,也可以有參數,可以直接看源碼的參數說明,
figsize=(width,height) #這個指定圖的大小,單位好像是inch,
dpi # dot per inch,像素密度,是不是就是類似于iphone顯示屏的ppi,視網膜屏的ppi要求在,326ppi,在960x640的3.5寸屏上。
還有其他參數。

這里是用plt調用figure(),沒有保存其返回值,這個函數是有返回值的,返回一個什么什么Figure對象,

再看plt.plot(x,y),這個將數據畫成曲線,顯示,x就對應橫坐標,y對應縱坐標,x,y都是一個一維的list,這個是很好理解的。
plot除了需要x,y這兩個參數,還可以有其他參數,比如,指定線的樣式,可以是虛線,點線,還有顏色,線的寬度,這些可以使用關鍵字參數指定。還有一個,這里可以指定label,這個label可以用來作圖例的文字。

最后是plt.show(),這個就是把圖像顯示出來,好像沒什么好說的。

關于標注和標題
由于只是一幅圖,比較好指定,plt.xlabel(text),plt.ylabel(text),plt.title(text),還可以制定字體大小,使用關鍵字參數fontsize=16,補充一點就是公式的輸入,它支持latex格式的公式輸入,就是兩個$中間寫latex的公式,保證字符串是raw格式,這個還是很好用的。有一個在線的latex公式編輯測試,很好用的,給出鏈接,http://www.codecogs.com/latex/eqneditor.php

關于坐標軸范圍,
通過plt.axis([xmin xmax ymin ymax]指定,

關于網格,plt.grid(True),就可以顯示網格。

關于圖例,如果在畫曲線的時候制定了label,那么圖例也是很簡單的,plt.legend()就可以了。在matplotlib里面。有專門的一個legend的類,還很復雜的,暫時不深究了。

關于畫多條曲線,在matlab里面要使用hold on,這個好像不需要,直接繼續plt.plot(x,y)就可以了。
下面看個完整的例子。

import numpy as np
import matplotlib.pyplot as plt

def f1(t):
    return np.exp(-t)*np.cos(2*np.pi*t)

def f2(t):
    return np.sin(2*np.pi*t)*np.cos(3*np.pi*t)

t = np.arange(0.0,5.0,0.02)


plt.figure()
plt.plot(t,f1(t),"g-",label="$f(t)=e^{-t} \cdot \cos (2 \pi t)$")
plt.plot(t,f2(t),"r-.",label="$g(t)=\sin (2 \pi t) \cos (3 \pi t)$",linewidth=2)

plt.axis([0.0,5.01,-1.0,1.5])
plt.xlabel("t")
plt.ylabel("v")
plt.title("a simple example")

plt.grid(True)
plt.legend()
plt.show()

畫圖結果如下,

這只是很簡單的一種情況,其他的情況,比如兩個y軸,多個子圖,子圖的標題,不標準的子圖布局,等,見后面的更新。


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 AutoPoster 的頭像
    AutoPoster

    互聯網 - 大數據

    AutoPoster 發表在 痞客邦 留言(0) 人氣()