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

求VS Code环境下Python提取GC色谱峰保留时间与峰面积代码

气相色谱(GC)数据峰提取与分析Python方案

需求概述

处理CSV格式的气相色谱数据,提取所有峰的保留时间(Retention Time)和峰面积(Peak Area),生成带编号的峰列表,同时可在VS Code中运行并可视化色谱图。现有R代码仅能识别首个峰,需替换为Python实现。

可直接运行的Python代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks
from scipy.integrate import simpson

# 1. 读取CSV数据(替换为你的文件路径)
csv_path = "your_gc_data.csv"
df = pd.read_csv(csv_path)

# 假设CSV列名为"RT"(保留时间)和"TIC"(信号强度),列名不同请自行修改
rt = df["RT"].values
tic = df["TIC"].values

# 2. 峰检测参数调整(可根据实际数据修改)
# height: 峰的最小高度,过滤噪音;distance: 峰之间的最小采样点距离
peaks, properties = find_peaks(tic, height=100, distance=50)

# 3. 计算每个峰的面积(使用辛普森积分)
peak_areas = []
for peak_idx in peaks:
    # 确定峰的左右基线边界
    peak_pos = np.where(peaks == peak_idx)[0][0]
    left_bound = 0 if peak_pos == 0 else (peaks[peak_pos-1] + peak_idx) // 2
    right_bound = len(tic)-1 if peak_pos == len(peaks)-1 else (peak_idx + peaks[peak_pos+1]) // 2
    
    # 对峰区间的信号积分
    area = simpson(tic[left_bound:right_bound+1], rt[left_bound:right_bound+1])
    peak_areas.append(area)

# 4. 生成带编号的峰列表
peak_list = pd.DataFrame({
    "峰编号": range(1, len(peaks)+1),
    "保留时间(sec)": [round(rt[p], 3) for p in peaks],
    "峰面积": [round(a, 2) for a in peak_areas]
})

# 打印峰列表
print("峰提取结果:")
print(peak_list)

# 5. 可视化色谱图并标注峰信息
plt.figure(figsize=(12, 6))
plt.plot(rt, tic, label="TIC信号")
plt.scatter(rt[peaks], tic[peaks], color="red", marker="o", label="检测到的峰")

# 标注每个峰的RT和面积
for i, (p_rt, p_area) in enumerate(zip(rt[peaks], peak_areas)):
    plt.text(p_rt + 0.5, tic[peaks][i] + 50, 
             f"峰{i+1}\nRT: {round(p_rt,3)}s\n面积: {round(p_area,2)}",
             fontsize=8, bbox=dict(facecolor='white', alpha=0.8))

plt.xlabel("保留时间(sec)")
plt.ylabel("信号强度(TIC)")
plt.title("气相色谱图峰标注")
plt.legend()
plt.grid(alpha=0.3)
plt.show()

# 可选:将峰列表保存为CSV
peak_list.to_csv("gc_peak_results.csv", index=False)

使用说明

  1. 依赖安装:在VS Code终端运行以下命令安装所需库:
    pip install pandas numpy matplotlib scipy
    
  2. 路径与列名修改:将代码中的csv_path替换为你的GC数据CSV文件路径;如果CSV的列名不是"RT"和"TIC",请同步修改代码中对应的列名。
  3. 参数调整:
    • find_peaks中的height:设置峰的最小高度,过滤低强度噪音峰
    • distance:设置峰之间的最小采样点距离,避免识别过近的假峰
    • 积分边界逻辑可根据实际色谱峰的基线情况微调
  4. 运行:在VS Code中直接运行脚本,会输出峰列表、显示带标注的色谱图,同时可选将结果保存为CSV文件。

现有R代码问题说明

你提供的R代码中,findpeaks调用时传入的是x(一个0到1的序列)而非实际的TIC信号,导致峰检测逻辑错误;且DrawChromatogram默认仅返回首个峰,因此无法提取所有峰信息。上述Python代码直接基于原始信号处理,可正确识别所有符合条件的峰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:05:01