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

Matplotlib动画图如何仅动态展示最新数据点的数值标注

问题解决代码

import numpy as np
from matplotlib.animation import FuncAnimation
from matplotlib import pyplot as plt


def collatz(k):
    seq = [k]
    while seq[-1] > 1:
       if k % 2 == 0:
         seq.append(k/2)
       else:
         seq.append(3*k+1)
       k = seq[-1]
    return seq

y= collatz(22)
x = list(range(len(y)))
  
fig = plt.figure()
plt.xlim(0, len(y)-1)
plt.ylim(1,max(y))

draw, = plt.plot([],[], marker='o', markersize='4', color='magenta') 
# 存储上一帧的标注对象
last_ann = None

def update(idx):
    global last_ann
    draw.set_data(x[:idx+1], y[:idx+1])
    # 先删除上一帧的旧标注
    if last_ann is not None:
        last_ann.remove()
    # 生成当前帧的新标注
    ann = plt.annotate(f'{y[idx]:.1f}', (x[idx],y[idx]), textcoords="offset points", xytext=(0,5), ha="center")
    last_ann = ann
    return draw, ann

a = FuncAnimation(fig, update, frames=len(x), interval=500, repeat=False)

plt.show()

核心修改说明

  1. 新增全局变量last_ann存储上一帧的标注,每次更新帧时先删除旧标注,避免历史标注堆积
  2. 修正了原代码set_data(x[:idx], y[:idx])的切片问题:Python切片左闭右开,原写法会漏掉当前索引对应的点,导致看起来标注比点先渲染
  3. 移除plt.pause调用,直接通过FuncAnimation的interval参数控制帧间隔,不会打乱内部渲染调度
  4. 调整标注偏移量、x轴范围,避免显示截断、标注和点重叠的问题
  5. 返回值新增标注对象,保证渲染时的时序正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 16:48:03