python的matplotlib包可以幫助我們繪制豐富的圖表,有助於我們的數據分析。
matplotlib官方文檔:matplotlib
本博客所有代碼默認導入matplotlib.pyplot和numpy包,即默認有以下代碼:
import matplotlib.pyplot as plt
import numpy as np
最基本的x-y函數圖象:plt.plot()
以y=sin(x),x=2πt;where t:[0,2]的圖象為例
示例代碼:
t=np.arange(0.0,2.0,0.01)#自變量t
s=np.sin(2*np.pi*t)#計算y
#####必須語句######
plt.plot(t,s)#指定x,y
plt.xlabel('t')#x軸標簽
plt.ylabel('y')#y軸標簽
plt.title(r'image')#圖象標題
plt.grid(True)#畫網格
#####必須語句######
plt.show()#畫出圖象

直方圖:plt.hist()
畫直方圖最核心的函數為plt.hist(),其主要參數有:
- x:每個矩形條的高度,list等數組
- bins:矩形條個數,matplotlib把矩形條稱為“箱”
返回值:
- n:矩形條高度(y軸)
- bins:矩形條橫向位置(x軸)
- patches:矩形條對象,包含n,bins信息
詳見:hist官方文檔
以均值mu=100,方差sigma=15的正態分布的函數圖像為例
示例代碼1:
import matplotlib.mlab as mlab
mu=100
sigma=15
x=mu+sigma*np.random.randn(10000)#生成矩形條高度
num_bins=10#矩形條個數
#####必須語句######
n,bins,patches=plt.hist(x,num_bins)#傳入矩形條高度和個數
plt.xlabel('x')
plt.ylabel('y')
plt.title('histogram')
#####必須語句######
plt.show()

示例代碼2:
import matplotlib.mlab as mlab
mu=100
sigma=15
x=mu+sigma*np.random.randn(10000)
num_bins=50
#normed=1表示畫的是概率密度,和為1;facecolor:矩形條顏色;alpha:色深參數n,bins,patches=plt.hist(x,num_bins,normed=1,facecolor='green',alpha=0.5)
#畫出一條逼近的曲線
y=mlab.normpdf(bins,mu,sigma)
plt.plot(bins,y,'r--')
plt.xlabel('x')
plt.ylabel('y')
plt.title('histogram')
plt.show()

3d離散點ax.scatter()
詳見:scatter官方文檔
示例代碼:
from mpl_toolkits.mplot3d import Axes3D
#x_list為離散點的list,內層list為一個三元組,每一個三元組代表三維空間中的一個點
x_list=[[1,2,3]]
fig=plt.figure()
ax=fig.gca(projection='3d')#返回坐標軸,projection還可以傳入'polar'
for x in x_list:#遍歷每個點,繪制
ax.scatter(x[0],x[1],x[2],c='r')
plt.show()

3d空間曲面ax.plot_surface()
示例代碼:
from matplotlib import cm
from matplotlib.ticker import LinearLocator,FormatStrFormatter
fig=plt.figure()
ax=fig.gca(projection='3d')
X=np.arange(-5,5,0.1)#x坐標
Y=np.arange(-5,5,0.1)#y坐標
X,Y=np.meshgrid(X,Y)
R=np.sqrt(X**2+Y**2)
Z=np.sin(R)#計算出z坐標
#畫表面:x,y,z坐標,rstride:橫向步長,cstride:縱向步長,cmap:顏色,linewidth:線寬,antialiased:是否漸變
surf=ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=cm.coolwarm,linewidth=0,antialiased=False)
ax.set_zlim(-1.01,1.01)#坐標系的下邊界和上邊界
ax.zaxis.set_major_locator(LinearLocator(10))#設置Z軸標度
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))#Z軸精度
#shrink顏色條伸縮比例(0-1),aspect顏色條寬度(反比例,數值越大寬度越窄)
fig.colorbar(surf,shrink=0.5,aspect=5)
plt.show()

餅形圖plt.pie()
示例代碼1:
labels='Frogs','Hogs','Dogs','Logs'#設置標簽
size=[15,30,45,10]#占比,和為100
colors=['yellow','gold','lightskyblue','lightcoral']#顏色
#展開第二個扇形,即Hogs,間距為0.1.注意explode傳入的是一個tuple,哪個位置不為0,哪個對應的標簽被展開,且不為0的數值就是展開的間距值
explode=(0,0.1,0,0)
#startangle控制餅狀圖的旋轉方向
plt.pie(size,explode=explode,labels=labels,colors=colors,shadow=True,startangle=90)
plt.show()

示例代碼2:
labels='Frogs','Hogs','Dogs','Logs'
size=[15,30,45,10]
colors=['yellow','gold','lightskyblue','lightcoral']
explode=(0,0,0.1,0)#展開Dogs,間距值0.1
#autopct參數表示顯示百分比,且決定了百分比的格式
plt.pie(size,explode=explode,labels=labels,colors=colors,shadow=True,autopct='%1.1f%%',startangle=90)
plt.show()

