绘制一个具有动画效果的图表

本文介绍了如何使用Python的matplotlib库和FuncAnimation函数,实现一个在正弦曲线上移动并实时显示坐标的动态红点动画。详细步骤包括数据准备、画布创建、动画设计和保存为GIF格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

函数FuncAnimation

fig:表示动画所在的布。

func:表示每帧动画週用的通教。

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

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

fargs:表示传递给func函数的其他参数。

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

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

  • import numpy as np
    import matplotlib
    import matplotlib.pyplot as plt
    import matplotlib.animation as 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)      #调整布局
    plt.plot(x, y)                           #绘制正弦函数
    point_ani, = plt.plot(x[0], y[0], "ro")  #绘制红圆点
    text_pt = plt.text(4, 0.8, '', fontsize=16)
    
    
    # 3. 动画设计
    def update_points(num):   #更新画面函数(回调函数)
        if num % 5 == 0:
            point_ani.set_marker("o")
            point_ani.set_markersize(8)
        else:
            point_ani.set_marker("o")
            point_ani.set_markersize(83
    
        point_ani.set_data(x[num], y[num])
        text_pt.set_text("x=%.3f, y=%.3f" % (x[num], y[num]))
        return point_ani, text_pt,
    
    # 4.开始制作动画
    #核心要素1:fig 索要绘制的目标画布
    #核心要素2:interval=10 帧的刷新间隔(回调update的时间间隔)
    #核心要素3:指定更新图表的函数(即需要回调的函数)
    
    ani = animation.FuncAnimation(fig, update_points, np.arange(0, 100), interval=10, blit=True)
    
    # 5.将动画保存为gif图片(用于上传博客)
    ani.save('sin_test3.gif', writer='imagemagick', fps=10)
    # 6.展示图表
    plt.show()
    
    

    效果图如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值