Python之matplotlib基礎
matplotlib是Python優秀的數據可視化第三方庫
matplotlib庫的效果可參考
http://matplotlib.org/gallery.html
matplotlib的使用 由各種可視化類構成,內部結構復雜,受matlab庫啟發,matplotlab.pyplot是繪制種類可視化圖形的命令子庫,相當於快捷方式
import matplotlib.pyplot as plt
一個小示例
import matplotlib.pyplot as plt
plt.plot([2,3,4,5,1,6])
plt.ylabel("Grade")
plt.ylabel("number")
plt.axis([-1,11,0,7])
plt.savefig('test',dpi=600)#plt.savefig()將輸出圖形存儲為文件,默認為png格式,可以通過dpi修改輸出質量
plt.show()
得到結果

繪制多圖subplot
plot.subplot(nrows,ncols,plot_number)
在全局繪制區域中創建一個分區體系,並定位到一個子繪圖區域
pyplot繪圖區域示例
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.0, 5.0, 0.02)
plt.subplot(211)
plt.plot(a, f(a))
plt.subplot(2, 1, 2)
plt.plot(a, np.cos(2 * np.pi * a), 'r--')
plt.savefig('test',dpi=600)
plt.show()
得到結果:

pyplot的plot()函數詳解
plt.plot(x,y,format_string,**kwargs)
x:x軸數據,列表或數組,可選
y:y軸數據,列表或數組
format_string: 控制曲線的格式字符串,可遷
**kwargs: 第二組或更多的(x,y,format_string)
注意:當繪制多條曲線時,各條曲線的x不能省略
format_string:控制曲線的格式字符串,可選。由顏色字符、風格字符和標記字符組成
| 顏色字符 | 說明 | 顏色字符 | 說明 |
|---|---|---|---|
| 'b' | blue | 'm' | magenta洋紅色 |
| 'g' | green | 'y' | 黃色 |
| 'r' | red | 'k' | 黑色 |
| 'c' | cyan青綠色 | 'w' | 白色 |
| '#008000' | RGB某顏色 | '0.8' | 灰度值字符串 |
| 風格字符 | 說明 |
|---|---|
| '-' | 實線 |
| '--' | 破折線 |
| '-.' | 點划線 |
| ':' | 虛線 |
| ' ' | 無線條 |
| 標記字符 | 說明 | 標記字符 | 說明 | 標記字符 | 說明 |
|---|---|---|---|---|---|
| '.' | 點標記 | '1' | 下花三角標記 | 'h' | 豎六邊形標記 |
| ',' | 像素標記(極小點) | '2' | 上花三角標記 | 'H' | 橫六邊形標記 |
| 'o' | 實心圏標記 | '3' | 左花三角標記 | '+' | 十字形標記 |
| 'v' | 倒三角標記 | '4' | 右花三角標記 | 'x' | x標記 |
| '^' | 上三角標記 | 's' | 實心方形標記 | 'D' | 菱形標記 |
| '>' | 右三角標記 | 'p' | 實心五角標記 | 'd' | 瘦菱形標記 |
| '<' | 左三角標記 | '*' | 星形標記 | ' | ' |
**kwargs: 第二組或更多(x,y,format_string)
color: 控制顏色 如color='green'
linestyle:線條控制 如linestyle='dashed'
marker:標記風格,marker='o'
markerfacecolor:標記顏色,markerfacecolor='blue'
markersize:標記尺寸,markersize=20
...
pyplot的中文顯示
pyplot並不默認支持中文顯示,需要rcParams修改字體實現
全局設置中文字體
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams['font.family']='SimHei'
plt.plot([3,1,4,5,2])
plt.ylabel('縱軸值')
plt.savefig('test',dpi=600)
plt.show()
結果如下:

rcParams的屬性
| 屬性 | 說明 |
|---|---|
| 'font.family' | 用於顯示字體的名字 |
| 'font.style' | 字體風格,正常'normal'或斜體'italic' |
| 'font.size' | 字體大小,整數字號或者'large','x-small' |
中文字體的種類
rcParams['font.family']
| 中文字體 | 說明 |
|---|---|
| 'SimHei' | 中文黑體 |
| 'Kaiti' | 中文楷體 |
| 'LiSu' | 中文隸書 |
| 'FangSong' | 中文仿宋 |
| 'YouYuan' | 中文幼圓 |
| STSong | 華文宋體 |
示例:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
matplotlib.rcParams['font.family']='STSong'
matplotlib.rcParams['font.size']=20
a = np.arange(0.0,5.0,0.02)
plt.xlabel('縱軸: 振幅')
plt.ylabel('橫軸: 時間')
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.savefig('test',dpi=600)
plt.show()

局部設置中文字體
在有中文輸出的地方,增加一個屬性:fontproperties
import matplotlib.pyplot as plt
import numpy as np
a = np.arange(0.0,5.0,0.02)
plt.xlabel('縱軸: 振幅', fontproperties='SimHei',fontsize=20)
plt.ylabel('橫軸: 時間', fontproperties='SimHei',fontsize=20)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.savefig('test',dpi=600)
plt.show()

注意到,如果設置全局字體的話,那么坐標軸的字體也被改變,局部設置中文字體不改變坐標軸的字體。
pyplot的文本顯示
pyplot的文本顯示函數
| 函數 | 說明 |
|---|---|
| plt.xlabel() | 對x軸增加文本標簽 |
| plt.ylabel() | 對y軸增加文本標簽 |
| plt.title() | 對圖形本整體增加文本標簽 |
| plt.text() | 在任意位置增加文本 |
| plt.annotate() | 在圖形中增加帶箭頭的注釋 |
text函數示例
import matplotlib.pyplot as plt
import numpy as np
a = np.arange(0.0,5.0,0.02)
plt.xlabel('縱軸: 振幅', fontproperties='SimHei', fontsize=20, color = 'green')
plt.ylabel('橫軸: 時間', fontproperties='SimHei', fontsize=20)
plt.title(r'正弦波實例$y=cos(2\pi x)$',fontproperties='SimHei',fontsize=25)
plt.text(2,1,r'$\mu=100$',fontsize=15)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.savefig('test',dpi=600)
plt.show()

annotate函數示例
import matplotlib.pyplot as plt
import numpy as np
a = np.arange(0.0,5.0,0.02)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.xlabel('縱軸: 振幅', fontproperties='SimHei', fontsize=20, color = 'green')
plt.ylabel('橫軸: 時間', fontproperties='SimHei', fontsize=20)
plt.title(r'正弦波實例$y=cos(2\pi x)$',fontproperties='SimHei',fontsize=25)
plt.annotate(r'$\mu=100$',xy=(2,1),xytext=(3,1.5),
arrowprops=dict(facecolor='black',shrink=0.1,width=2))
plt.axis([-1,6,-2,2])
plt.grid()
plt.savefig('test',dpi=600)
plt.show()

