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

求助:为MALDI图谱标注指定局部最大值(峰值)

解决方案

要给指定m/z的峰值柱形添加标注,你可以通过以下步骤修改代码:

  1. 将读取的x、y数据转为numpy数组,方便快速定位目标值;
  2. 定义需要标注的目标m/z列表,遍历每个目标值,找到对应柱形的坐标后,用plt.text()添加标注;
  3. 调整标注的位置,避免与柱形重叠。

修改后的完整代码:

import matplotlib.pyplot as plt
import numpy as np

x = []
y = []
for line in open('Maldi', 'r'):
    lines = [i for i in line.split()]
    x.append(float(lines[0]))
    y.append(float(lines[1]))

# 转为numpy数组方便查找
x = np.array(x)
y = np.array(y)

plt.title("Spectra")
plt.xlabel('m/z')
plt.ylabel('Intensity')
plt.bar(x, y, width=0.05)

# 指定需要标注的目标m/z
target_mzs = [630, 637, 690]
for mz in target_mzs:
    # 找到对应mz的索引(考虑浮点精度,用近似匹配)
    idx = np.where(np.isclose(x, mz, atol=0.1))[0][0]
    # 获取对应的强度值
    intensity = y[idx]
    # 在柱形上方添加标注,位置稍微上移避免重叠
    plt.text(x[idx], intensity + max(y)*0.01, f"{mz}", ha='center', fontsize=10)

plt.xlim([500, 1000])
plt.show()

说明:

  • 使用np.isclose()做近似匹配,避免因浮点精度问题找不到目标m/z;
  • ha='center'让标注在柱形正上方居中;
  • 标注的y轴位置加上了max(y)*0.01作为偏移,你可以根据实际图谱调整这个数值,让标注位置更美观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:45:08