最近学习matplotlib绘制动画,然后加入到pyqt里显示。今天学了如何创建动态图形,特保存方便以后查阅。第一个案例是要不停显示0-360度的正弦图形。首先要导入相关的图库
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation
import matplotlib.axes._axes as axes # 加入这行代码是为了调用方便显示
fig,ax=plt.subplots()#type:axes.Axes
#这样后面再用ax.XXX就会提示
完整代码
fig,ax=plt.subplots()#type:axes.Axes
x=np.arange(0,2*np.pi,0.01)
line,=ax.plot(x,np.sin(x)) #这里的逗号不能漏掉
def animate(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=animate,frames=50,init_func=init,interval=50,blit=True)
plt.show()
案例二:
绘制一个动态的圆,半径从0变到80,同样函数返回的对象后面逗号不能漏掉。
ax.set_xlim(0,150)
ax.set_ylim(0,150)
ax.set_aspect('equal','box')
fig,ax=plt.subplots()#type:axes.Axes
ax.set_xlim(0,150)
ax.set_ylim(0,150)
ax.set_aspect('equal','box')
def draw_cirl(i):
cirle=plt.Circle((75,75),i)
ax.add_patch(cirle)
return ax.add_patch(cirle), #要返回这个对象,注意逗号不能丢
def init():
cirle = plt.Circle((75, 75), 40)
ax.add_patch(cirle)
return ax.add_patch(cirle),#要返回这个对象,注意逗号不能丢
案例三,把动画保存为GIF动画
fig=plt.figure()
ax=plt.subplot()#type:axes.Axes
# ax.set_xlim(0,150)#画圆时启用
# ax.set_ylim(0,150)
ax.set_aspect('equal','box')
def update(i):
# circle=plt.Circle((75,75),i*0.25)#画圆
# ax.add_patch(circle)#添加路径
ax.scatter(i,i)#画点图
# ax.bar(i,i)#画条形图
#核心代码
ani=animation.FuncAnimation(fig,
update,
frames=80,#动画总共有多少帧,传递给i
interval=1000,#每两张图片的间隔时间
blit=False)#是否所以的点
ani.save('cir.gif',fps=24,writer='pillow')