讲师中心 微信公众号
AI工具推荐 视频效率加速

如何使用 Matplotlib 实现真空压力数据的实时动态更新绘图

梦辰吖_9852

梦辰吖_9852

发布时间:2026-02-01 15:02:07

|

318人浏览过

|

来源于php中文网

原创

如何使用 Matplotlib 实现真空压力数据的实时动态更新绘图

本文详解如何避免 matplotlib 每次循环都弹出新窗口,通过正确复用 figure 和 axes 对象,实现单窗口内连续更新压力曲线,适用于 tcp 通信采集的实时传感器数据可视化。

在使用 Matplotlib 进行实时数据可视化时,一个常见误区是:在循环内部反复调用 plt.figure() 或 pyplot.figure() —— 这会为每一次迭代创建全新的图形窗口,导致“每读一个值就弹出一个新图”的问题。您提供的代码中,figure = pyplot.figure() 被错误地放在了 while 循环内部,这是根本原因。

要实现真正的“动态更新”(即同一窗口持续刷新曲线),必须将图形对象(figure 和 axes)的创建移至循环外部,仅在循环中更新数据并重绘。以下是优化后的核心结构与完整可运行示例:

Livestream Script Generator
Livestream Script Generator

直播带货脚本:话术、节奏、互动、促单。适用于主播、电商运营、MCN机构。

下载

✅ 正确做法:分离初始化与更新逻辑

import socket
import time
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from datetime import datetime

# --- 1. 初始化 TCP 连接 ---
target_host = "10.1.2.121"
target_port = 50
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((target_host, target_port))
print(f"Connected to {target_host}:{target_port}")

# --- 2. 初始化绘图(⚠️ 关键:只执行一次!)---
plt.yscale('symlog')
plt.grid(True)
fig, ax = plt.subplots(figsize=(10, 6))
line, = ax.plot([], [], 'b-', linewidth=2, label='Vacuum Pressure (Torr)')
ax.set_xlabel('Time')
ax.set_ylabel('Pressure (Torr)')
ax.legend()
ax.ticklabel_format(axis='y', style='sci', scilimits=(0,0))

# 数据缓冲区(限制历史长度,防止内存溢出)
max_points = 200
x_data, y_data = [], []

# --- 3. 定义动画更新函数 ---
def update_frame(frame):
    try:
        # 发送命令 & 解析响应
        client.send(b'?VP\r\0')
        response = client.recv(1024).decode('ascii').strip()
        # 示例响应: "VP:3.58E-7" → 提取数值
        if response.startswith("VP:"):
            val_str = response[3:].replace("E", "e")
            pressure = float(val_str)

            # 更新数据
            now = datetime.now()
            x_data.append(now)
            y_data.append(pressure)

            # 限制数据点数量(可选)
            if len(x_data) > max_points:
                x_data.pop(0)
                y_data.pop(0)

            # 刷新线条数据
            line.set_data(x_data, y_data)

            # 自动调整坐标轴范围
            ax.relim()
            ax.autoscale_view()

            print(f"[{now.strftime('%H:%M:%S')}] Pressure: {pressure:.2e} Torr")

    except Exception as e:
        print(f"Read error: {e}")

    return line,

# --- 4. 启动动画(非阻塞,支持后台持续采集)---
ani = FuncAnimation(fig, update_frame, interval=200, blit=False, cache_frame_data=False)

# 显示图形(保持主线程运行)
plt.show()

# ⚠️ 注意:plt.show() 后的代码不会执行;如需优雅退出,建议用信号或 GUI 事件控制

? 关键要点总结

  • 禁止在循环中新建 figure/axis:plt.figure()、plt.subplot()、fig, ax = plt.subplots() 等必须置于循环外。
  • 使用 FuncAnimation 替代手动循环绘图:它内置帧调度、重绘优化与事件循环管理,比 plt.ion() + plt.pause() 更稳定可靠。
  • 显式调用 ax.relim() 和 ax.autoscale_view():确保每次新增数据后坐标轴自动适配范围。
  • 添加异常处理与日志输出:TCP 通信易受网络波动影响,避免因单次失败中断整个动画。
  • 考虑数据缓存策略:长时间运行时,限制 x_data/y_data 长度,防止内存泄漏。
? 提示:若后续集成 GUI(如 PyQt/PySide),应改用 FigureCanvasQTAgg 嵌入控件,并通过 QTimer 触发更新,而非 FuncAnimation——后者依赖 plt.show() 的主事件循环,在 GUI 中可能冲突。

遵循以上结构,您即可获得一个稳定、低延迟、单窗口持续更新的真空压力实时曲线图,为后续构建完整监控系统打下坚实基础。

热门AI工具

更多
PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

354

2023.09.25

传感器故障解决方法
传感器故障解决方法

传感器故障排除指南:识别故障症状(如误读或错误代码)。检查电源和连接(确保连接牢固,无损坏)。校准传感器(遵循制造商说明)。诊断内部故障(目视检查、信号测试、环境影响评估)。更换传感器(选择相同规格,遵循安装说明)。验证修复(检查信号准确性,监测异常行为)。

4764

2024.06.04

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

0

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

20

2026.11.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

40

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

20

2026.11.05

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

40

2026.11.04

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

40

2026.11.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn