You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于DataFrame生成逐点绘制的散点图GIF/视频?

问题解决:生成DataFrame散点图GIF/视频

错误原因分析

  • 核心报错根源:plt.subplot(sharex=True)仅返回单个Axes对象,不能用fig, ax = ...解构赋值,应使用plt.subplots()获取图和轴的元组。
  • 动画逻辑混乱:原代码在animate函数内重复创建图表,无法累积帧数据;未实现“逐帧依次绘制第1至第6个数据点”的核心需求。
  • 数据与绘图错误:错误的DataFrame列索引方式、未初始化绘图数据列表、混淆折线图(plot)与散点图(scatter)的用法。

修复后的完整代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from IPython import display

# 生成示例数据
row_data = np.arange(0, 6)
column_X = np.random.rand(6,)
column_Y = np.random.rand(6,)
column_Z = np.random.rand(6,)
column_K = np.random.rand(6,)

my_df = pd.DataFrame({
    'column_X': column_X,
    'column_Y': column_Y,
    'column_Z': column_Z,
    'column_K': column_K
}, index=row_data)

# 初始化图表和轴对象
fig, ax = plt.subplots(figsize=(8, 5))
# 定义各列颜色映射
colors = {'column_X': 'blue', 'column_Y': 'red', 'column_Z': 'brown', 'column_K': 'green'}
# 预创建散点图对象,用于后续帧更新
scatters = {}
for col in my_df.columns:
    scatters[col], = ax.plot([], [], 'o', color=colors[col], label=col)

# 设置图表基础属性
ax.set_xlabel("行索引")
ax.set_ylabel("数值")
ax.set_title("逐帧绘制散点图")
ax.set_xlim(-0.5, 5.5)
ax.set_ylim(0, 1)  # 适配0-1随机数,可根据实际数据调整
ax.legend()

# 动画初始化函数:清空所有散点数据
def init():
    for scatter in scatters.values():
        scatter.set_data([], [])
    return tuple(scatters.values())

# 动画更新函数:j为当前帧索引(0-5对应第1-6个数据点)
def animate(j):
    for col in my_df.columns:
        # 取当前列的前j+1个数据点
        x_data = my_df.index[:j+1]
        y_data = my_df[col][:j+1]
        scatters[col].set_data(x_data, y_data)
    return tuple(scatters.values())

# 创建动画:6帧对应6个数据点,间隔1秒
animation_1 = animation.FuncAnimation(fig, animate, init_func=init, frames=6, interval=1000, blit=True)

# 在Jupyter中显示视频
video_1 = animation_1.to_html5_video()
html_code_1 = display.HTML(video_1)
display.display(html_code_1)

# 可选:保存为GIF(需安装pillow库:pip install pillow)
# animation_1.save('scatter_animation.gif', writer='pillow', fps=1)

plt.tight_layout()
plt.show()

关键修改说明

  • 用plt.subplots()替代plt.subplot(),解决解构赋值报错问题。
  • 提前初始化散点图对象,在animate函数中仅更新数据,避免重复创建图表。
  • 实现逐帧绘制逻辑:每帧j对应绘制各列的前j+1个数据点。
  • 明确散点图绘制方式,添加图表范围、标签和图例,提升可视化清晰度。
  • 支持在Jupyter中显示视频,或保存为可用于PPT的GIF文件。

内容的提问来源于stack exchange,提问作者bluered_earth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:35:23