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

Matplotlib绘制连续数据流时如何实现固定长度滑动区段显示

Matplotlib连续数据流滑动窗口实时绘图实现

不需要改动原有动画框架的核心逻辑,只需要补充固定窗口配置、手动控制x轴显示范围即可实现滑动显示效果,核心修改点如下:

  • 提前定义固定的窗口长度常量,指定每次展示的x轴区段宽度
  • 每次帧刷新后主动设置x轴显示边界,禁止matplotlib自动适配全量历史数据缩放坐标轴
  • 可选配置:关闭动画帧缓存、固定y轴范围,避免长时间运行内存泄漏、画面抖动

实现代码

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from itertools import count
import random

# 基础参数配置
WINDOW_SIZE = 10  # 固定显示的x轴区段长度
UPDATE_INTERVAL = 1000  # 数据更新间隔,单位毫秒

x_values = []
y_values = []
index = count()

def animate(i):
    current_x = next(index)
    x_values.append(current_x)
    y_values.append(random.randint(0, 5))

    plt.cla()
    # 数据填满初始窗口后,仅绘制窗口内的最近数据
    if len(x_values) <= WINDOW_SIZE:
        plt.plot(x_values, y_values)
        plt.xlim(0, WINDOW_SIZE)
    else:
        show_start = len(x_values) - WINDOW_SIZE
        plt.plot(x_values[show_start:], y_values[show_start:])
        # x轴随新数据同步右移,实现滑动效果
        plt.xlim(current_x - WINDOW_SIZE + 1, current_x + 1)
    
    # 固定y轴范围避免画面跳变,可根据自身数据范围调整
    plt.ylim(-1, 6)

# 关闭帧缓存避免长时间运行内存占用持续上涨
ani = FuncAnimation(plt.gcf(), animate, interval=UPDATE_INTERVAL, cache_frame_data=False)
plt.tight_layout()
plt.show()

如果你需要完全匹配举例的「第一次迭代显示0-10、第二次迭代显示1-11」效果——即从第一个数据点开始窗口就同步右移,不需要等数据填满初始区段,直接删掉判断逻辑,每次帧刷新固定执行plt.xlim(current_x, current_x + WINDOW_SIZE)即可。
如果程序需要连续运行数小时以上,可以追加简单的裁剪逻辑:当列表长度超过2倍窗口长度时,每次移除列表最前端的1个旧数据,避免历史数据无限累积占用内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.15 16:16:02