1. 程式人生 > >【機器學習】Matplotlib 快速入門筆記

【機器學習】Matplotlib 快速入門筆記

Matpoltlib

Matplotlib 快速入門筆記

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 快速入門筆記