matplotlib绘制李萨如图(二) animation实现动态2D李萨如图

本文介绍了如何利用matplotlib的FuncAnimation函数绘制动态2D李萨如图。首先回顾了静态图的绘制,然后详细解释了FuncAnimation的主要参数,包括fig、func、frames、init_func、interval和blit。在update函数中,通过修改Line2D对象的数据实现动画效果。最后展示了完整的代码示例,并给出了保存动图的方法。
摘要由CSDN通过智能技术生成

matplotlib绘制李萨如图(二)

——动态2D李萨如图

1 前期回顾

众所周知,动图是由一帧一帧静态图构成的,要绘制出动态图,首先要掌握静态图的绘制

2 主要函数

FuncAnimation

除了上面链接里要用到的绘图用基本函数,绘制动图主要使用的就是matplotlib中的animation库的FuncAnimation函数。

函数FuncAnimation(fig,func,frames,init_func,interval,blit)是绘制动图的参数如下:

fig:要绘制动图的画布名称;

func:更新动画的函数,注意该函数只能有一个形参传入;

frames:一个数组,其大小为动画一次循环的帧数,而数组中的值在函数运行时会传递给之前传入的函数func;

init_func:自定义开始帧,即传入刚定义的函数init,初始化函数;

interval:更新频率,单位为ms;

blit:选择更新所有点,还是仅更新产生变化的点。应选择True,但mac用户请选择False,否则无法显示。

updata

这个函数就是传入上述FuncAnimation中func参数的,需要我们自己来写。

要注意,这个函数只能有一个参数传入,所以我们在制作动图的时候也只能定一个变化量。

在updata中,我们需要绘制下一帧的画面并更新:

def updata(n):
    x=np.sin(p*theta)
    y=np.sin(q*theta+n*np.pi)
    Liss.set_data(x,y)
    return Liss

注意,这里的Liss是Line2D类型的变量,我们才能用set_data去修改。

save

简单一点的用法就是直接ani.save('保存的文件名'),就可以在代码所在文件夹保存动图,还有更多的用法可以参考这篇博客

3 完整代码及效果

上面也说了,updata函数只能作用于Line2D类型的变量,而plot函数返回的是一个长度为1的list,所以我们需要先从list里面把我们想要更改的Line2D拿出来。

可以用

a=axs.plot(x,y)
Liss=a[0]

把这个list里唯一的的元素提取出来,也可以用

Liss,=axs.plot(x,y)

直接提取,更多可见这篇博客

import matplotlib.pyplot as plt
import numpy as np
import time
import matplotlib.animation as animation
fig=plt.figure()
axs=fig.add_subplot(111)#1*1的网格,第1个图
axs.set(xlim=[-1,1],ylim=[-1,1],title='Lissajous-Figure')
theta=np.linspace(0,2*np.pi,1000)
x=np.sin(theta)
y=np.sin(theta)
Liss,=axs.plot(x,y)
p=1
q=1
def updata(n):
    x=np.sin(p*theta)
    y=np.sin(q*theta+n*np.pi)
    Liss.set_data(x,y)
    return Liss
ani=animation.FuncAnimation(fig,updata,frames=np.linspace(0,2,100),interval=10)
ani.save('Liss.gif')
plt.show()

麻了,上传不了gif,大家把代码复制下来自己跑一边即可……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShadyPi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值