You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于Python的mmWave板卡生命体征数据采集项目:Excel数据自动绘图与自动展示需求咨询

基于Python的mmWave板卡生命体征数据采集项目:Excel数据自动绘图与自动展示需求咨询

嘿,这个需求我之前做物联网数据采集相关项目时刚好碰过,给你拆解成「触发时机」「数据读取与绘图」「自动展示」三个部分来讲,附具体代码示例,应该能直接套用到你的项目里:


一、先解决「程序关闭时自动触发绘图」的核心触发逻辑

这里分两种场景,看你的采集程序是命令行脚本还是带GUI的应用

场景1:命令行式采集程序(无界面)

用Python自带的atexit模块,它可以注册程序退出时自动执行的函数——不管你是正常退出、按Ctrl+C终止,还是程序跑完结束,都会触发这个函数,非常适合命令行场景。

场景2:带GUI的采集程序(比如用tkinter/Qt开发)

如果你的采集程序有可视化界面,直接绑定窗口的关闭事件就行。比如用tkinter的话,重写窗口关闭的回调函数,先执行绘图逻辑,再销毁窗口,确保绘图动作在程序完全关闭前完成。


二、读取Excel数据+绘制生命体征图表

这里用pandas读Excel(比原生xlrd/xlwt更省心,支持复杂格式),matplotlib绘图(最常用的Python绘图库,完全能满足生命体征数据的可视化需求,比如心率/呼吸率的时间序列图)。

先提前装好用到的依赖库:

pip install pandas matplotlib openpyxl

(openpyxl是pandas读取xlsx格式文件必需的依赖)


三、完整代码示例

示例1:命令行采集程序版本

import atexit
import pandas as pd
import matplotlib.pyplot as plt
import os

# 建议用绝对路径,避免工作目录变化导致找不到文件
EXCEL_FILE_PATH = os.path.abspath("./vital_signs_log.xlsx")

def plot_vital_signs():
    print("程序正在退出,开始生成生命体征图表...")
    try:
        # 1. 读取Excel数据(假设你的Excel有:时间、心率、呼吸率三列)
        df = pd.read_excel(EXCEL_FILE_PATH, engine="openpyxl")
        
        # 2. 清理无效数据(比如空值)
        df = df.dropna(subset=["时间", "心率", "呼吸率"])
        
        # 3. 创建绘图画布
        plt.figure(figsize=(12, 7))
        
        # 4. 绘制心率时间序列图
        plt.subplot(2, 1, 1)
        plt.plot(df["时间"], df["心率"], color="#e74c3c", linewidth=2, marker=".", label="心率(bpm)")
        plt.title("mmWave生命体征采集数据趋势")
        plt.ylabel("心率值")
        plt.grid(alpha=0.3)
        plt.legend()
        
        # 5. 绘制呼吸率时间序列图
        plt.subplot(2, 1, 2)
        plt.plot(df["时间"], df["呼吸率"], color="#3498db", linewidth=2, marker=".", label="呼吸率(次/分钟)")
        plt.xlabel("采集时间")
        plt.ylabel("呼吸率值")
        plt.grid(alpha=0.3)
        plt.legend()
        
        # 自动调整子图间距,避免标签重叠
        plt.tight_layout()
        
        # 可选:把图表保存成图片文件,方便后续归档
        plt.savefig(os.path.abspath("./vital_signs_trend.png"), dpi=150, bbox_inches="tight")
        
        print("图表生成完成,自动展示中...")
        # 6. 自动弹出窗口展示图表
        plt.show()
        
    except Exception as e:
        print(f"生成图表时出错:{str(e)}")

# 注册退出时执行的绘图函数
atexit.register(plot_vital_signs)

# ----------------------
# 这里替换成你的mmWave数据采集逻辑
# 示例:模拟采集程序运行
print("数据采集程序运行中,按Ctrl+C退出...")
try:
    while True:
        # 实际代码:采集数据 -> 写入Excel
        pass
except KeyboardInterrupt:
    print("正在退出程序...")

示例2:带tkinter GUI的采集程序版本

import tkinter as tk
from tkinter import messagebox
import pandas as pd
import matplotlib.pyplot as plt
import os

EXCEL_FILE_PATH = os.path.abspath("./vital_signs_log.xlsx")

def plot_vital_signs():
    try:
        df = pd.read_excel(EXCEL_FILE_PATH, engine="openpyxl")
        df = df.dropna(subset=["时间", "心率", "呼吸率"])
        
        plt.figure(figsize=(10, 6))
        plt.plot(df["时间"], df["心率"], color="#e74c3c", label="心率")
        plt.plot(df["时间"], df["呼吸率"], color="#3498db", label="呼吸率")
        plt.title("生命体征数据趋势图")
        plt.xlabel("采集时间")
        plt.ylabel("数值")
        plt.grid(alpha=0.3)
        plt.legend()
        plt.tight_layout()
        
        # 自动弹出窗口展示
        plt.show()
        return True
    except Exception as e:
        messagebox.showerror("生成失败", f"图表生成出错:{str(e)}")
        return False

def on_close():
    # 窗口关闭前先执行绘图逻辑
    print("正在生成生命体征图表...")
    plot_vital_signs()
    # 不管绘图成功与否,最终关闭窗口
    root.destroy()

# 创建GUI主窗口
root = tk.Tk()
root.title("mmWave生命体征采集系统")
root.geometry("300x150")

# 绑定窗口关闭事件
root.protocol("WM_DELETE_WINDOW", on_close)

# 示例GUI控件(替换成你的采集控制按钮)
start_btn = tk.Button(root, text="开始采集", command=lambda: messagebox.showinfo("提示", "已开始数据采集!"))
start_btn.pack(pady=30)

root.mainloop()

四、几个实用的注意事项

  • Excel路径问题:一定要用绝对路径(比如os.path.abspath()),不然如果程序在不同工作目录下运行,会找不到Excel文件;
  • 文件占用问题:采集程序写入Excel后,要确保文件完全保存(比如用pandas.to_excel()时,默认会自动关闭文件,无需额外操作;如果是实时追加写入,建议每次写入后添加flush=True);
  • 图表展示兼容:如果程序在无桌面的服务器上运行,plt.show()会报错,这时候可以只保存图片,或者配置matplotlib的虚拟显示后端;本地运行的话用默认后端即可;
  • 大数据优化:如果采集的时间序列数据量极大(比如上万条),绘图前可以做降采样(比如df = df.iloc[::10],每10个点取一个),避免图表加载卡顿;
  • 异常处理:务必保留try-except块,处理Excel不存在、数据格式错误等情况,避免程序退出时崩溃。

要是你的Excel列名、数据格式和示例不一样,或者需要绘制其他类型的图(比如柱状图、散点图),可以再补充细节,我再帮你调整~

火山引擎 最新活动