文章目录
- 1、动画效果
- 2、原理分析
- 3、动画源码
本篇文章其实与数据分析没有太大关系,因为是涉及到数据分析的数据可视化方面的内容,因此也必须要学习。主要内容是如何制作一个气泡动画效果,当然也是使用matplotlib模块下的animation模块。
1、动画效果
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5SMzcjNzYTOhNmMwYDN4gTZyYzX4QjN1kDMyAzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
动态图片是限制了大小的,所以可能清晰度不是很好,这里再来一张静态图片吧:
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()