天天看點

MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)

MatplotLib庫是Python中最常用的第三方繪圖庫,他的API設計大部分模仿自matlab。是以matplotlib與matlab的使用十分相像。

以下程式段在各種環境下均可運作,但推薦在spyder下運作。

  • 一維、二維資料的繪圖與儲存
import matplotlib.pyplot as plt
plt.plot([3,2,1,4,5])
plt.ylabel("grade")
plt.savefig("test",dpi=200) # dpi(Dots Per Inch,每英寸點數,代表圖形品質)
plt.show() # 在IPython環境下展示圖像           

對于一維資料,預設清單值為縱坐标,而清單的索引為橫坐标。繪圖結果如下 

MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)

如果要在matlab中實作上述繪圖,應寫代碼如下,可将兩者進行對比。

a=[3,2,1,5,4];
plot(a);           

以下是一個二維資料繪圖的小例:

import matplotlib.pyplot as plt
plt.plot([0,2,4,6,8],[3,2,1,4,5])
plt.ylabel("grade")
plt.axis([-1,10,0,6])
plt.savefig("test",dpi=200) # dpi(Dots Per Inch,每英寸點數,代表圖形品質)
plt.show() # 在IPython環境下展示圖像           
MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)
  •  繪圖區域分割
import numpy as np
import matplotlib.pyplot as plt


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


a=np.arange(0,5,0.02)
b=f(a)
plt.subplot(2,1,1) # 也可以簡寫為plt.subplot(212)
plt.plot(a,b)
plt.subplot(2,1,2)
plt.plot(a,np.cos(2*np.pi*a),'r--')

plt.show()           
MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)
  • plot函數的format_string 

顔色字元

MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)

風格字元

MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)

标記字元 

MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)

format string 由顔色字元+風格字元+标記字元組合而成

在繪圖時,為了區分不同的曲線,往往不僅需要不同的顔色,也需要不同的風格字元,這是因為在列印機上列印的時候線條往往是黑白的。下面是一個執行個體

import numpy as np
import matplotlib.pyplot as plt


a=np.arange(0,5,0.2)
plt.plot(a,a*1.5,'go-',a,a*2.5,'bx',a,a*3.5,'r-.')
plt.show()           
MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)
  • pyplot的中文顯示

在pyplot繪圖中,并不能直接顯示中文,為了顯示中文,需要使用一些額外的參數,請看如下程式段:

import numpy as np
import matplotlib.pyplot as plt


a=np.arange(0,5,0.2)
plt.plot(a,a*1.5,'go-',a,a*2.5,'go',a,a*3.5,'r-.')
plt.xlabel('橫軸',fontproperties='SimHei',fontsize=20)
plt.show()           

在設定xlabel時,需要額外增加fontproperties='SimHei’這一參數,意思是使用黑體。python中的中文字型分别叫如下名稱:

MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)
  • pyplot中的文本顯示函數
MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)
import numpy as np
import matplotlib.pyplot as plt


a=np.arange(0,5,0.02)
plt.plot(a,np.cos(2*np.pi*a),'r-')
plt.xlabel('橫軸',fontproperties='Kaiti',fontsize=20,color='red')
plt.ylabel('縱軸',fontproperties='Kaiti',fontsize=20)
plt.title('示例函數$y=cos(2\pi x)$',fontproperties='SimHei',fontsize=20)
plt.text(2,1,'$\Omega =2\pi $',fontsize=12)

plt.axis([-1,6,-2,2])
plt.grid(True) # t要大寫
plt.show()           
MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)
  • 子繪圖區域的分割 

利用subplot函數可以對繪圖區域進行一些簡單的分割,但是對于一些更複雜的情況則無能為力,例如如下區域分割,隻利用subplot函數則難以完成:

MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)

此時可以以下函數進行區域分割

MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)
plt.subplot2grid((3,3),(1,0),colspan=1)           

 這段代碼選中了圖中的黃色區域。參數(3,3)表示把整個區域分成的基本方格;(1,0)表示選中第1行第0列的小方格,也就是黃框的左半部分;cospan=2表示列方向的長度擴充為2。

MatplotLib庫的簡單示例程式(plot、格式字元串設定、中文顯示、文本顯示函數、子繪圖區域分割函數)