接上一篇让 Matplotlib、seaborn 静态数据图动起来-CSDN博客,使用matplotlib绘制动画,由于代码只展示了核心部分,数据也没有共享,本篇文章提供一个可直接运行的示例,以供读者测试。
代码实现了如下功能:定义静态图形绘制函数,该函数用于绘制动态绘图中的一个帧,该函数基于传入的随机数种子计算1000个随机数的均值,并将其绘制在一个柱状图中。然后使用matplotlib.animation.FuncAnimation让静态图动起来,其基于传入参数,依次绘制动画的每一帧图形,然后联合成动画效果。这里我们让其绘制分别以1-50为随机数种子得到的柱状图。代码如下:
#动态直方图
import matplotlib.pyplot as plt
import pandas as np
import numpy as np
from matplotlib import ticker
from matplotlib import animation
from IPython.display import HTML
fig, ax = plt.subplots(figsize=(8, 6))
# 定义静态绘图函数
def draw_histogram(seed):
np.random.seed(seed)
data=[]
for i in range(1000):
x=np.random.choice([0,1],p=[0.5,0.5],size=1)
data.append(x)
mean_value = np.mean(data)
ax.clear()
ax.bar('Mean', mean_value, color='skyblue', edgecolor='black')
ax.text(0,
mean_value + 0.01,
f'{mean_value:.2f}',
color='#777777',
size=20,
ha='center',
weight=800)
# 显示当前的种子值
ax.text(0.5,
0.9,
f'Seed: {seed}',
transform=ax.transAxes,
color='#777777',
size=20,
ha='center',
weight=800)
ax.set_ylim(0, 1) # 设置 y 轴范围为 0 到 1
ax.yaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.2f}'))
ax.tick_params(axis='x', colors='#777777', labelsize=12)
ax.tick_params(axis='y', colors='#777777', labelsize=12)
ax.set_ylabel('Mean Value')
ax.margins(0.05)
ax.grid(which='major', axis='y', linestyle='-')
ax.set_axisbelow(True)
ax.axhline(0.5, color='red', linewidth=2)
plt.close()
# 调用matplotlib.animation.FuncAnimation让静态图动起来
animator = animation.FuncAnimation(fig,
draw_histogram,
frames=range(0, 50))
# Jupyter Notebook里展示动图animation
HTML(animator.to_jshtml())
运行结果如下: