要想及时的了解数学信息,请中学师生关注公众号“中学究尽数学”;大学生关注公众号“究尽数学”

基于matplotlib实现数学函数图像的动画

Python huijiaorz 67℃ 0评论

动画可以更客观、形象的展示一些结果,该文来展示一下函数:$$f(x,t)=x^{\frac{2}{3}}+0.9\sqrt{3.3-x^2}\sin(tx\pi)$$

随着$t\in[0,20]$的变化,函数图像如下图所示:

使用matplotlib.animate

代码如下:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

fig, ax = plt.subplots()
plt.axis('equal')
plt.axis('off')
xdata, ydata = np.linspace(-2*np.pi, 2*np.pi, 1000), []
temp1,temp2 = np.power(np.square(xdata),0.33), 0.9*np.sqrt(3.3-np.square(xdata))
ln, = ax.plot([], [], 'r-', animated=False)

def init():
    ax.set_xlim(-np.pi, np.pi)
    ax.set_ylim(-2, 3)
    return ln,

def update(n):
    ydata = temp1 + temp2*np.sin(n*np.pi*xdata)
    ln.set_data(xdata, ydata)
    return ln,

ani = FuncAnimation(fig, update, frames=np.linspace(0, 20, 100), init_func=init, blit=True)
plt.show()

matplotlib.animate中绘图函数FuncAnimation(fig,func,frames,init_func,interval,blit)参数说明:

  • fig为画布
  • func为自定义的动画函数
  • frames为func的帧数参数
  • init_func自定义初始化函数
  • interval以毫秒计的更新频率
  • blit指示更新所有数据,还是新变化的数据点,是布尔值

借助Moviepy

需要安装Moviepy,通过matplotlib自定义一个动画函数即可,需要使用mplfig_to_npimage将画布对象进行转化,然后用VideoClip可导出为gif,也可导出为MP4视频格式。代码如下:

import numpy as np
import matplotlib.pyplot as plt
from moviepy.video.io.bindings import mplfig_to_npimage
import moviepy.editor as mpy

duration = 20
fig_mpl, ax = plt.subplots(1,figsize=(5,3), facecolor='white')
plt.axis('equal')
plt.axis('off')
xdata, ydata = np.linspace(-2*np.pi, 2*np.pi, 1000), []
temp1,temp2 = np.power(np.square(xdata),0.33), 0.9*np.sqrt(3.3-np.square(xdata))

ax.set_xlim(-np.pi, np.pi)
ax.set_ylim(-2, 3)
line, = ax.plot([], [], 'r-')

def make_frame_mpl(t):
    ydata = temp1 + temp2*np.sin(t*np.pi*xdata)
    line.set_data(xdata,ydata)
    return mplfig_to_npimage(fig_mpl)

animation =mpy.VideoClip(make_frame_mpl, duration=duration)
animation.write_gif("heart.gif", fps=20)

使用Mayavi

使用方式与Moviepy很类似,这里省略几行代码。因为Mayavi依赖强大的ITK可视化引擎,所以考虑通过Mayavi处理复杂的数据集,用来制作3D数据或可交互数据。

转载请注明:究尽数学 » 基于matplotlib实现数学函数图像的动画

喜欢 (1)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址