matplotlib库绘图基础
matplotlib庫畫圖基礎(chǔ)
文章目錄
- matplotlib庫畫圖基礎(chǔ)
- 1.matplotlib簡介
- 2.繪圖操作
- 2.1導(dǎo)入畫圖庫
- 2.2畫第一個(gè)圖
- 2.3創(chuàng)建figure
- 2.4控制線條風(fēng)格
- 2.5坐標(biāo)軸控制
- 2.6繪制坐標(biāo)軸
- 2.7繪制標(biāo)注
- 2.8繪制散點(diǎn)圖
- 2.9繪制條形圖
- 2.10繪制等高圖
- 2.11繪制三維圖
- 2.12在figure中繪制多個(gè)子圖
1.matplotlib簡介
? Matplotlib 是一個(gè)非常強(qiáng)大的 Python 畫圖工具,如果用過MATLAB的話,學(xué)這個(gè)學(xué)起來十分簡單,因?yàn)镸atplotlib的畫圖跟MATLAB里面的函數(shù)差不多。
2.繪圖操作
2.1導(dǎo)入畫圖庫
import matplotlib.pyplot as plt import numpy as np2.2畫第一個(gè)圖
以下操作都在jupyter notebook中畫制,如果是在pycharm等其他編譯器,會(huì)彈出figure組件,供用戶調(diào)整畫像。
x = np.linspace(-1,1,50) y1 = 2*x + 1 y2 = x**2 #畫圖使用plot plt.plot(x,y1,x,y2) plt.show()基礎(chǔ)知識(shí)點(diǎn):每個(gè)畫圖都會(huì)使用一個(gè)figure,figure可以認(rèn)為是一個(gè)畫板,如果不特別聲明,所以畫圖和曲線將在一個(gè)默認(rèn)figure中展示
2.3創(chuàng)建figure
在jupyter notebook中畫制是沒有figure組件彈出的,所以所有的繪圖都會(huì)輸出到notebook中
x = np.linspace(-1,1,50) y1 = 2*x + 1 y2 = x**2#figure1(獨(dú)立的畫板) plt.figure(1) plt.plot(x,y1)#figure2(獨(dú)立的畫板) plt.figure(2) plt.plot(x,y1) plt.plot(x,y2) plt.show()因?yàn)樵趈upyter notebook上畫的圖,直接顯示在頁面上,無法看到figure組件。用pycharm就沒事了。
2.4控制線條風(fēng)格
可以通過color控制線條顏色,linewidth控制線條寬度,linestyle控制線條風(fēng)格
x = np.linspace(-1,1,50) y1 = 2*x + 1 y2 = x**2#figure1 plt.figure(1) plt.plot(x,y1)#figure2 plt.figure(2) plt.plot(x,y1,color='r',linewidth=1.5,linestyle='dotted') plt.plot(x,y2,color='g',linewidth=1.5,linestyle='--') plt.show()2.5坐標(biāo)軸控制
對(duì)畫圖的x,y軸的坐標(biāo)進(jìn)行控制可以通過xlim和xlabel,ylim和ylabel進(jìn)行控制
x = np.linspace(-1,1,50) y1 = 2*x + 1 y2 = x**2plt.plot(x,y1,color='r',linewidth=1.5,linestyle='dotted') plt.plot(x,y2,color='g',linewidth=1.5,linestyle='--') #控制X坐標(biāo)顯示范圍 plt.xlim((-2,2)) #給X和Y軸起軸標(biāo)簽名 plt.xlabel('Xlabel') plt.ylabel('Ylabel') #控制X軸的度標(biāo),ticks標(biāo)度位置,labels標(biāo)度名 plt.xticks(np.linspace(-2,2,4)) plt.yticks(ticks=[-0.5,1,2.5],labels=['bad','good','very good'])#曲線對(duì)照框 plt.legend(('label1', 'label2')) plt.show()2.6繪制坐標(biāo)軸
將坐標(biāo)軸移動(dòng)到畫圖中心。
x = np.linspace(-1,1,50) y1 = 2*x + 1 y2 = x**2plt.plot(x,y1,color='r',linewidth=1.5,linestyle='dotted') plt.plot(x,y2,color='g',linewidth=1.5,linestyle='--') plt.xlim((-2,2)) plt.xlabel('X') plt.ylabel('Y') plt.xticks(np.linspace(-2,2,4)) plt.yticks(ticks=[-0.5,1,2.5],labels=['bad','good','very good'])ax = plt.gca() # get current axis 獲得坐標(biāo)軸對(duì)象 ax.spines['right'].set_color('none') # 將右邊 邊沿線顏色設(shè)置為空 其實(shí)就相當(dāng)于抹掉這條邊 ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') # 設(shè)置中心的為(0,0)的坐標(biāo)軸 ax.spines['bottom'].set_position(('data', 0)) # 指定 data 設(shè)置的bottom(也就是指定的x軸)綁定到y(tǒng)軸的0這個(gè)點(diǎn)上 ax.spines['left'].set_position(('data', 0))plt.show()2.7繪制標(biāo)注
主要是在畫圖中標(biāo)注信息,起主要使用函數(shù)annotate()來實(shí)現(xiàn)
x = np.linspace(-1,1,50) y = 2*x + 1 x0 = 0.5 y0=2*x0+1 plt.scatter(x0,y0) plt.plot([x0,x0],[y0,-1],'--',lw=2.5) plt.plot(x,y) #xy控制箭頭的點(diǎn),xytext控制標(biāo)簽的位置,arrowprops用來設(shè)置箭頭的風(fēng)格 #r'$2x+1=%s$'%y0 是要打印的文本內(nèi)容,這里r代表字符串中字符不轉(zhuǎn)義(不好說明,如果看不懂直接寫自己要打印的內(nèi)容即可) plt.annotate(r'$2x+1=%s$'%y0,xy=(x0,y0),xytext=(0.6,1.5),arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')) plt.show()2.8繪制散點(diǎn)圖
繪制散點(diǎn)圖使用函數(shù)scatter,該函數(shù)主要用作繪制散點(diǎn)圖
x = np.linspace(-1,1,50) y = 2*x + 1 r = np.random.normal(0,0.3,50) y1= y+rplt.scatter(x,y1,color='b',linewidths=1) plt.plot(x,y,color='r',linewidth=2.5)plt.show()2.9繪制條形圖
x = np.linspace(0,5,6) y = 2*x + 10 r = np.random.normal(0,2,6) y1= y+r #畫柱狀圖 plt.bar(x,y1,edgecolor='white') plt.bar(x,-y,color='orange',edgecolor='white') #標(biāo)注值 for X,Y in zip(x,y1):plt.text(X,Y+0.1,'%.2f'%Y,ha='center',va='bottom') for X,Y in zip(x,y):plt.text(X,-Y-2.2,'%.2f'%Y,ha='center',va='bottom')plt.show()2.10繪制等高圖
# 計(jì)算x,y坐標(biāo)對(duì)應(yīng)的高度值 def f(x, y):return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2)# 生成x,y的數(shù)據(jù) n = 256 x = np.linspace(-3, 3, n) y = np.linspace(-3, 3, n)# 把x,y數(shù)據(jù)生成mesh網(wǎng)格狀的數(shù)據(jù) #等高線的顯示是在網(wǎng)格的基礎(chǔ)上添加上高度值 X, Y = np.meshgrid(x, y)# 填充等高圖 Cs=plt.contourf(X, Y, f(X, Y),8,alpha=0.7,cmap=plt.cm.hot) #等高線 C=plt.contour(X, Y, f(X, Y),8,colors='black') #增加標(biāo)簽 plt.clabel(C,inline=True,fontsize=8) #設(shè)置顏色條 plt.colorbar(Cs)# 顯示圖表 plt.show()2.11繪制三維圖
畫三維圖,需要使用Axes3D模塊,所有要先進(jìn)行導(dǎo)入:
from mpl_toolkits.mplot3d import Axes3D構(gòu)建三維坐標(biāo):
figure = plt.figure() ax = Axes3D(figure)#也可以這樣 fig = plt.figure() ax = fig.gca(projection='3d')繪制:
# X, Y 的值 X = np.arange(-4, 4, 0.25) Y = np.arange(-4, 4, 0.25) # x,y 平面的網(wǎng)格,其實(shí)就是對(duì)X,Y進(jìn)行廣播操作 X, Y = np.meshgrid(X, Y) R = np.sqrt(X ** 2 + Y ** 2) # Z 的值 Z = np.sin(R) # rstride:網(wǎng)格之間的行跨度 # cstride:網(wǎng)格之間的列跨度 ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow')) # zdir : 等高線圖('z' | 'x' | 'y') # offset : 表示等高線圖投射到指定頁面的某個(gè)刻度 ax.contourf(X,Y,Z,zdir='z',offset=-2)p # z軸的顯示范圍 ax.set_zlim(-2,2) plt.show()這里的刻度沒負(fù)號(hào)是因?yàn)樵趈upyter里面畫的圖,matplotlib對(duì)jupyter notebook多少有點(diǎn)不兼容。
在jupyter notebook中因?yàn)闆]辦彈出figure組件,輸出的結(jié)果直接是顯示在網(wǎng)頁中的。這導(dǎo)致一些顯示會(huì)出問題。在pycharm編譯器基本不會(huì)出現(xiàn)這種顯示的錯(cuò)誤。
2.12在figure中繪制多個(gè)子圖
使用subplot,在一個(gè)figure中繪制多個(gè)圖
fig=plt.figure() plt.subplot(2,2,1) #繪制圖1plt.subplot(2,2,2) #繪制圖2plt.subplot(2,2,3) #繪制圖3plt.subplot(2,2,4) #繪制圖4總結(jié)
以上是生活随笔為你收集整理的matplotlib库绘图基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pandas loc和iloc区别
- 下一篇: ES6的导入和导出模块