在前述学习过程中,已经掌握基本的曲线图像画法,并尝试探索过3D动画基础教程。
相关文章可以通过下述链接直达:
python画三角函数图|小白入门级教程_正余弦函数画图python-CSDN博客
python动画教程|Animations using Matplotlib-官网教程程序解读_如何用python制作微动画-CSDN博客
在此基础上,我们尝试对曲线进行动态输出,效果如下:
图1
【1】官网教程
打开下述链接,直达官网教程:
Animated line plot — Matplotlib 3.9.2 documentation
教程简洁高效,为此进行了注解。
【2】代码解读
首先引入关键模块numpy和matplotlib:
import matplotlib.pyplot as plt #引入画图模块 import numpy as np #引入计算模块 import matplotlib.animation as animation #引入动画制作模块
然后定义画图和变量:
fig, ax = plt.subplots() #定义画图 x = np.arange(0, 2*np.pi, 0.01) #定义自变量 line, = ax.plot(x, np.sin(x)) #定义因变量
之后定义一个函数,用于动态输出Y轴数值:
def animate(i): #自定义函数 line.set_ydata(np.sin(x + i / 50)) # update the data. 更新Y轴数据,实现动态输出 return line,
然后调用动画模块制作动画:
ani = animation.FuncAnimation( #绘制动画 fig, animate, interval=20, blit=True, save_count=50)
最后直接输出图形:
plt.show() #输出图形
【3】代码改写
实际上,上述代码输出的结果不能直接保存。但程序上自带了一些注释:
# To save the animation, use e.g. # # ani.save("movie.mp4") # # or # # writer = animation.FFMpegWriter( # fps=15, metadata=dict(artist='Me'), bitrate=1800) # ani.save("movie.mp4", writer=writer)
为此我们尝试直接新增一行代码:
ani.save("movie.mp4")
实际结果却是报错:
图2
经过尝试,改为下述代码:
ani.save('animations.gif')
可以发现输出成功,没有报错。
【4】代码优化
为了优化表达效果,增加输出曲线,定义line1:
x = np.arange(0, 2*np.pi, 0.01) #定义自变量 line, = ax.plot(x, np.sin(x)) #定义因变量 line1, = ax.plot(x, np.cos(x)) #定义因变量
然后自定义函数跟随更新:
def animate(i): #自定义函数 line.set_ydata(np.sin(x + i / 50)) # update the data. 更新Y轴数据,实现动态输出 line1.set_ydata(np.cos(x + i / 50)) # update the data. 更新Y轴数据,实现动态输出 return line,line1
输出结果更新为:
图3
此时的完整代码为:
import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块
import matplotlib.animation as animation #引入动画制作模块
fig, ax = plt.subplots() #定义画图
x = np.arange(0, 2*np.pi, 0.01) #定义自变量
line, = ax.plot(x, np.sin(x)) #定义因变量
line1, = ax.plot(x, np.cos(x)) #定义因变量
def animate(i): #自定义函数
line.set_ydata(np.sin(x + i / 50)) # update the data. 更新Y轴数据,实现动态输出
line1.set_ydata(np.cos(x + i / 50)) # update the data. 更新Y轴数据,实现动态输出
return line,line1
ani = animation.FuncAnimation( #绘制动画
fig, animate, interval=20, blit=True, save_count=50)
#ani.save('animation.MP4', writer='imagemagick') #保存动画
ani.save('animations.gif') #保存动画
# To save the animation, use e.g.
#
# ani.save("movie.mp4")
#
# or
#
# writer = animation.FFMpegWriter(
# fps=15, metadata=dict(artist='Me'), bitrate=1800)
# ani.save("movie.mp4", writer=writer)
#writer = animation.FFMpegWriter(
#fps=15, metadata=dict(artist='Me'), bitrate=1800)
#ani.save("movie.mp4", writer=writer)
plt.show() #输出图形
【5】总结
学习了使用python实线动画曲线输出的技巧,并且掌握了gif动画保存技巧和多条曲线同时输出技巧。