动画设计之小点移动

本文介绍了如何使用Python的matplotlib库和FuncAnimation函数创建一个具有动画效果的正弦曲线,包括初始红点位于曲线左端,随时间移动并显示坐标。通过设置动画帧和参数,最终将动画保存为.gif文件。
摘要由CSDN通过智能技术生成

一、要求
#  绘制一个具有动画效果的图表,具体要求如下:
# (1)  绘制一条正弦曲线;
# (2)  绘制一个红色圆点,该圆点最初位于正弦曲线的左端;
# (3)  制作一个圆点沿曲线运动的动画,并时刻显示圆点的坐标位置。
#      (具体效果参考运行结果gif图)

二、导入模块

# %matplotlib notebook
# %matplotlib auto,
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation  #Animation库是一个用于处理场景中动画的库,它可以在绘制的每一帧中通过不断的修改模型位置和姿态,已达到连续动画的效果。
# 0. 设置中文黑体
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

三、准备数据

# 1. 准备正弦曲线数据
x = np.linspace(0, 2*np.pi, 100)   
y = np.sin(x)


# 2. 创建画布和坐标系
fig = plt.figure(tight_layout=True)  #tight_layout设置紧凑布局
ax = fig.add_subplot(111)

# 3. 绘制正弦曲线
ax.plot(x, y)
roll,=plt.plot(x[0],y[0],"ro")   #在(0,0)的位置创建一个红色圆点 

四、动画设计
 

def func(num):
    if x[num] == 6.283 and y[num] == 0:
        roll.set_data(x[0],y[0])
    else:
        roll.set_data(x[num],y[num])
    text.set_text("x=%.3f,y=%.3f"%(x[num],y[num]))
    return roll,text

text=plt.text(4,0.9,"",fontsize=16)
ani = animation.FuncAnimation(fig=fig,func=func,frames=200,interval=100,blit=True)

plt.xlabel('x轴',fontsize=12)   #设置x轴标签
plt.ylabel('y轴',fontsize=12)   #设置y轴标签

注解:定义每帧动画调用的函数,传输num值,如果x[num]的值等于6.283且 y[num]的值等于0,则在画布中绘画一个(0,0)坐标的红色圆点,否则根据num的变化,绘画不同坐标的红色圆点。

FuncAnimation是基于函数的动画类,它通过重复调用同一函数来制作动画。使用方法如下:

FuncAnimation(fig, func, frames=None, init_func=None, fargs=None, save_count=None, *, cache_farme_data=True , **kwargs)

1.fig : 表示动画所在的画布

2.func : 表示每帧动画调用的函数

3.frames : 表示动画的长度(一次动画包含的帧数)

4.init_func : 表示用于开始绘制帧的函数,它会在第一帧动画之前调用一次。若未设置该参数,则程序将使用frames序列中第一项的绘图结果。

5.fargs : 表示传递给func函数的其它参数。

6.interval :表示更新动画的频率,以毫秒为单位,默认为200

7.blit : 表示是否更新所有的点,默认为False。 官方推荐将blit参数设为True,但建议macOS的用户将blit参数设为False,否则将无法显示动画。

五、将动画保存为gif图片(用于上传博客)

ani.save("pratice7.3.gif", writer='pillow')  #需要在python环境中下载pillow

六、展示图表

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值