python中的Matlibplot繪相簿
1、概述
Matplotlib 是一個在 python 下實現的類 matlab 的純 python 的三方庫,旨在用 python實現 matlab 的功能,是python 下最出色的繪相簿,功能很完善,其風格跟 matlab 很相似,同時也繼承了 python 的簡單明瞭的風格,其可以很方便地設計和輸出二維以及三維的資料, 其提供了常規的笛卡爾座標, 極座標, 球座標, 三維座標等。
其使用中要先安裝 numpy 庫 (一個python 下陣列處理的三方庫, 可以很方便的處理矩陣,陣列) ,對於做資料圖,其原理很簡單,就是把函式變成關X於,Y,Z的座標點的陣列,如函式Y=X2 ,我們畫圖是也是先找一組特徵點(x,y),然後連線成線,matplotlib出圖的過程和我 們畫圖過程差不多,先生成 X 的一個取值陣列,如要畫區間[0,1]的影象,則先取[0,1]之內的一 組陣列(如:x=arange(0,1,0.01)表示 x 以 0.01 為步長取 100 個點),然後去對應 x 的對應 y 的 值的一組資料,這樣以座標(x,y)畫出的圖就是一條曲線了。
matplotlib 對於影象美化方面的比較完善,可以自定義線條的顏色和樣式,可以在一張繪圖紙上繪製多張小圖,也可以在一張圖上繪製多條線, 可以很方便地將資料視覺化並對比分析。
各函式含義:
Title為標題。Axis為座標軸,Label為座標軸標註。Tick為刻度線,Tick Label為刻度註釋。各個物件之間有下面的物件隸屬關係:
2、numpy處理資料
matplotlib將資料視覺化時基本上用到兩種方法:
(1)arange函式類似於python的range函式,通過指定開始值、終值和步長來建立一維陣列, 注意陣列不包括終值。
#此函式在區間[0,1]之間以0.1為步長生成一個數組。如果第三個引數不存在,則預設為1。
import numpy as np
print np.arange(0,1,0.1)
result:
[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
(2)linspace函式通過指定開始值、終值和元素個數來建立一維陣列,可以通過endpoint關鍵字指定是否包括終值,預設設定是包括終值。
#np.linspace(0, 1, 12,endpoint=False),設定不包括終值
import numpy as np
print np.linspace(0, 1, 12)
3、折線圖
#繪製折線圖
import matplotlib.pyplot as plt
year = [2011,2012,2013,2014]
pop = [1.2,3.4,4.5,6.5]
#折線圖繪製函式
plt.plot(year,pop)
plt.show();
4、散點圖
#繪製折線圖
import matplotlib.pyplot as plt
year = [2011,2012,2013,2014]
pop = [1.2,3.4,4.5,6.5]
#散點圖繪製函式
plt.scatter(year,pop)
plt.show();
5、直方圖
#繪製直方圖
import matplotlib.pyplot as plt
values = [0,1,2,3,4,1,2,3,4,4,5,2,4,1]
#直方圖繪製函式,bins為直方圖間隔份數
plt.hist(values,bins=10)
plt.show()
6、修飾圖
title(’圖形名稱’) (都放在單引號內)
xlabel(’x軸說明’)
ylabel(’y軸說明’)
text(x,y,’圖形說明’)
legend(’圖例1’,’圖例2’,…)
#coding=utf-8
import matplotlib.pyplot as plt
year = [1950,1970,1990,2010]
pop = [2.3,3.4,5.8,6.5]
#折線圖,實體填充
plt.fill_between(year,pop,0,color='green')
#軸的標籤
plt.xlabel('Year')
plt.ylabel('Population')
#軸的標題
plt.title('World Population')
#軸的y刻度
plt.yticks([0,2,4,6,8,10],['0B','2B','4B','6B','8B','10B'])
7 、繪製多個子圖
import matplotlib.pyplot as plt
import numpy as np
def f(t):
return np.exp(-t) * np.cos(2 * np.pi * t)
t1 = np.arange(0, 5, 0.1)
t2 = np.arange(0, 5, 0.02)
plt.figure(12)
plt.subplot(221)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'r--')
plt.subplot(222)
plt.plot(t2, np.cos(2 * np.pi * t2), 'r--')
plt.subplot(212)
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.show()
8、繪製三維影象
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X = [1, 1, 2, 2]
Y = [3, 4, 4, 3]
Z = [1, 2, 1, 1]
ax.plot_trisurf(X, Y, Z)
plt.show()
9、plt.axes()
我們先來看什麼是Figure和Axes物件。在matplotlib中,整個影象為一個Figure物件。在Figure物件中可以包含一個,或者多個Axes物件。每個Axes物件都是一個擁有自己座標系統的繪圖區域。其邏輯關係如下:
import matplotlib.pyplot as plt
import numpy as np
# create some data to use for the plot
dt = 0.001
t = np.arange(0.0, 10.0, dt)
r = np.exp(-t[:1000] / 0.05) # impulse response
x = np.random.randn(len(t))
s = np.convolve(x, r)[:len(x)] * dt # colored noise
# the main axes is subplot(111) by default
plt.plot(t, s)
plt.axis([0, 1, 1.1 * np.amin(s), 2 * np.amax(s)])
plt.xlabel('time (s)')
plt.ylabel('current (nA)')
plt.title('Gaussian colored noise')
# this is an inset axes over the main axes
a = plt.axes([.65, .6, .2, .2], axisbg='y')
n, bins, patches = plt.hist(s, 400, normed=1)
plt.title('Probability')
plt.xticks([])
plt.yticks([])
# this is another inset axes over the main axes
a = plt.axes([0.2, 0.6, .2, .2], axisbg='y')
plt.plot(t[:len(r)], r)
plt.title('Impulse response')
plt.xlim(0, 0.2)
plt.xticks([])
plt.yticks([])
plt.show()
本文介紹了一些常用的技巧,想了解更多Matlibplot資料視覺化內容,請參考: