matplotlib簡介


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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM