Python之数据分析(动画效果、animation模块、气泡动画)


本篇文章其实与数据分析没有太大关系,因为是涉及到数据分析的数据可视化方面的内容,因此也必须要学习。主要内容是如何制作一个气泡动画效果,当然也是使用matplotlib模块下的animation模块。

1、动画效果

11
动态图片是限制了大小的,所以可能清晰度不是很好,这里再来一张静态图片吧:
11
就这些泡泡会一个一个膨胀,最后爆炸,然后再随机位置重生,再继续膨胀,不断产生新的泡泡。

2、原理分析

  • 1)导入库:import matplotlib.animation as ma
  • 2)def 更新函数(顺序号):
    更新画面帧来渲染
  • 3)创建动画:ma.FuncAnimation(图形对象(mp.gcf()), 更新函数, interval=间隔时间(毫秒))

3、动画源码

import numpy as np
import matplotlib.pylab as mp
import matplotlib.animation as ma

n_bubbles = 100  # 定义100个气泡

# 将气泡(100个0)放进数组里面,并定义复合及结构
# # 气泡应该有位置、大小、上升速度、颜色四个属性
bubbles = np.zeros(n_bubbles, dtype=[
    ('position', float, 2),  # 2个float类型数据,确定位置
    ('size', float, 1),
    ('growth', float, 1),
    ('color', float, 4),
])

# 将位置定为大小是0到1均匀分布的随机数,排列是100行2列的二维数组
bubbles['position'] = np.random.uniform(0, 1, (n_bubbles, 2))
bubbles['size'] = np.random.uniform(50, 750, n_bubbles)  # 大小
bubbles['growth'] = np.random.uniform(30, 150, n_bubbles)  # 上升速度
bubbles['color'] = np.random.uniform(0, 1, (n_bubbles, 4))  # 颜色

# 显示气泡
mp.figure("Bubbles", facecolor="lightgray")
mp.title("Bubbles", fontsize=20)
# 关掉水平轴与纵轴
mp.xticks(())
mp.yticks(())

# 绘制气泡
# 位置:所有行的第0列是x坐标,所有行的第1列作为y坐标
# 大小:用一个数组表示大小
sc = mp.scatter(
    bubbles['position'][:, 0],
    bubbles['position'][:, 1],
    s = bubbles['size'],
    c = bubbles['color'],
    )

# 定义动画函数
def update(number):
    bubbles['size'] += bubbles['growth']  # 大小变化:加上上升速度


    # 记录想要破裂的气泡的索引
    burst = number % n_bubbles
    # 破裂气泡:改变位置,并置为0
    bubbles['position'][burst] = \
        np.random.uniform(0, 1, 2)
    bubbles['size'][burst] = 0
    # 重新生成气泡
    bubbles['growth'][burst] = \
        np.random.uniform(30, 150)
    bubbles['color'][burst] = \
        np.random.uniform(0, 1, 4)

    # 改变新气泡位置
    sc.set_offsets(bubbles['position'])
    # 修改大小
    sc.set_sizes(bubbles['size'])
    # 修改新气泡颜色
    sc.set_facecolor(bubbles['color'])

# 生成动画:每个10毫秒调用一次动画函数
anim = ma.FuncAnimation(mp.gcf(), update, interval=10)

mp.show()
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鸿蒙Next

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

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

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

打赏作者

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

抵扣说明:

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

余额充值