【機器學習】Matplotlib 快速入門筆記
阿新 • • 發佈:2018-04-07
MatpoltlibMatplotlib 快速入門筆記
Xu An 2018-4-7
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D
1、基本圖形繪制
x=np.linspace(-1,1,50)#(-1,1)的50個點 y=2*x+1 plt.plot(x,y)
2、figure的使用
x=np.linspace(-1,1,50)#(-1,1)的50個點 y1=2*x+x**5 y2=34*x+np.sin(x**2) plt.figure() plt.plot(x,y1) plt.figure(num=3,figsize=(8,5)) #num用來之星figure的數字,figsize用來制定figure的大小 l1=plt.plot(x,y2,label='a') #在一個figure中同時顯示兩條線 l2=plt.plot(x,y1,label='b')
3、坐標軸顯示
plt.xlim((-1,2)) #設置x軸的取值範圍 plt.ylim((-1,2)) #設置y軸的取值範圍 plt.xlabel('This is X') #設置坐標軸描述 plt.ylabel('This is Y') new_ticks=np.linspace(-1,2,5) print(new_ticks) plt.xticks(new_ticks) #更換角標 plt.yticks([-2,-1.8,-1],['$really_bad$','$bad$','$normal$','$good$']) #更改角標為文字,在文字前後加$表示輸出為數學字體(空格使用_代替) #想打出alpha,則需要加上 //alpha ax=plt.gca() #gca='get current axis' 獲得坐標軸 ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') #刪除指定位置的框線 ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') ax.spines['bottom'].set_position(('data',0)) #平移坐標軸 ax.spines['left'].set_position(('data',0))
4、圖例
plt.legend(handles=[l1,l2],labels=['aaa','bbb'],loc='best')
5.註釋
plt.figure() x3=np.linspace(-1,1,50)#(-1,1)的50個點 y3=x+1 x0=1 y0=x0+1 plt.scatter(x0,y0,s=50,color='b') # plt.plot([x0,x0],[y0,0],'k--',lw=2.5) # plt.annotate(r'$2x+1=3')% y0,xy(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset point'
6、散點圖——scatter
n=1024 X=np.random.normal(0,1,n) Y=np.random.normal(0,1,n) T=np.arctan2(X,Y) #for color value plt.scatter(X,Y,s=75,c=T,alpha=0.5) plt.xlim((-1.5,1.5)) plt.ylim((-1.5,1.5))
7、條形圖——bar
plt.figure() n=10 X=np.arange(n) Y1=(1-X/float(n)*np.random.uniform(0.5,1.0,n)) Y2=(1-X/float(n)*np.random.uniform(0.5,1.0,n)) plt.bar(X,+Y1) #使用bar打印出條形圖 plt.bar(X,-Y2) for x,y in zip(X,Y1): #給每個條形圖增加數字描述 plt.text(x,y+0.05,'%.2f'%y,ha='center',va='bottom') for x,y in zip(X,Y2): plt.text(x,-y+0.05,'%.2f'%y,ha='center',va='bottom')
8、等高線圖
plt.figure() def f(x,y): return(1-x/2+x**5+y**3)*np.exp(-x**2-y**2) n=256 x=np.linspace(-3,3,n) y=np.linspace(-3,3,n) X,Y=np.meshgrid(x,y) #把x,y綁定為網格輸入值 plt.contourf(X,Y,f(X,Y),10,alpha=0.75,linewidth=0.5) C=plt.contour(X,Y,f(X,Y),10,alpha=0.75,linewidth=0.5) plt.clabel(C,inline=True,fontsize=10) #增加數字標識
9、繪制3d圖像
fig=plt.figure() ax=Axes3D(fig) #輸入x,y的值 X=np.arange(-4,4,0.25) Y=np.arange(-4,4,0.25) #生成坐標空間 X,Y=np.meshgrid(X,Y) R=np.sqrt(X**2+Y**2) Z=np.sin(R) ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('plasma')) ax.contourf(X,Y,Z,zdir='z',offset=-1.5,cmap='plasma') #打印等高線
10、在一個窗口中顯示多個圖像——subplot
plt.figure() plt.subplot(2,2,1) #改變subplot的顯示區域(行,列,該圖所在的區域) plt.plot([0,1],[0,1]) plt.subplot(2,2,2) plt.plot([0,1],[0,2]) plt.subplot(2,2,3) plt.plot([0,1],[0,2]) plt.subplot(2,2,4) plt.plot([0,1],[0,2]) # 改變圖像的大小(非均勻分布) plt.figure() plt.subplot(2,1,1) #改變subplot的顯示區域(行,列,該圖所在的區域) 獨占一行 plt.plot([0,1],[0,1]) plt.subplot(2,3,4) #剩下三個占一行,數字標記按最小單位計算(獨占第一行為3個單位,下一行從第4個數起) plt.plot([0,1],[0,2]) plt.subplot(2,3,5) plt.plot([0,1],[0,2]) plt.subplot(2,3,6) plt.plot([0,1],[0,2])
11、次坐標
x=np.arange(0,10,0.1) y1=0.05*x**2 y2=-1*y1 fig,ax1=plt.subplots() #定義次坐標軸 ax2=ax1.twinx() ax1.plot(x,y1,'g-') ax2.plot(x,y2,'b--') ax1.set_xlabel('X data') ax1.set_ylabel('Y1',color='g') ax1.set_ylabel('Y2',color='b')
12、添加動畫
from matplotlib import animation #引入動畫模塊 fig,ax=plt.subplots() x=np.arange(0,2*np.pi,0.01) line,=ax.plot(x,np.sin(x)) #line初始化輸出為列表,想要第一位則需要加一個逗號 def animation_1(i): line.set_ydata(np.sin(x+i/10)) return line, def init(): line.set_ydata(np.sin(x)) return line, ani=animation.FuncAnimation(fig=fig,func=animation_1,frames=100,init_func=init,interval=20,blit=False) plt.show()
【機器學習】Matplotlib 快速入門筆記