谱图可视化
本文介绍 MassFlow 中的质谱图绘制功能。
作者:董乐强,董京伟
问题反馈: 如果在使用 MassFlow 或阅读文档时发现问题,可通过 GitHub Issues 提交反馈,或联系邮箱:707244007@qq.com。
概述
质谱成像数据中的每个采集位置都对应一条质谱。质谱图用于查看某一个位置检测到的离子信号,其中:
- 横轴表示 m/z;
- 纵轴表示信号强度。
通过质谱图可以先了解原始数据的大致状态,也可以比较预处理前后的变化。例如:
- 查看是否存在明显的基线抬高或缓慢漂移;
- 比较噪声抑制前后的连续质谱;
- 检查峰提取后主要离子峰是否被保留;
- 查看峰对齐或峰过滤前后的峰位置和峰数量变化。
质谱图反映的是某一个像素位置的质谱情况,不能单独代表整份 MSI 数据。实际分析时,建议结合多个组织位置的质谱、TIC 图和目标离子图一起判断。
功能说明
plot_spectrum
massflow.tools.plot.plot_spectrum(
base=None,
target=None,
save_path=None,
figsize=(20, 5),
dpi=300,
colors=None,
line_width=None,
plot_mode=None,
mz_range=None,
intensity_range=None,
metrics_box=True,
overlay=False,
)功能:可以绘制一条质谱,也可以比较两条质谱。
参数:
base:需要绘制的主要质谱。通常传入数据管理器中的一条质谱,例如dm.ms[0]。只绘制一条质谱时填写这一项target:需要与base所选质谱比较的第二条质谱。比较处理前后结果时填写;只绘制一条质谱时保持None。save_path:图片保存路径。保持None时直接显示图片。figsize:图片尺寸,默认(20, 5)。dpi:图片分辨率,默认300。数值越高图片越清晰。colors:设置质谱的颜色。默认None,表示使用程序默认配色。如需修改颜色可以传入相应颜色。例想改成红色可设置colors="red"line_width:设置线条宽度。默认宽度为1.5,一般情况下保持默认即可。如需调整,可以填写其他数值。该参数只影响绘图效果,不改变质谱数据。plot_mode:设置质谱的绘制方式。支持轮廓图"line"和棒状图"stem",默认为"line"。 比较两条质谱时,也可以分别指定绘图方式。例如["line", "stem"]表示第一条质谱使用轮廓图,第二条质谱使用棒状图。mz_range:设置横轴显示的 m/z 范围,例如(400, 410)表示只显示 m/z 400–410 的范围。不填写时会根据当前输入数据自动设置。intensity_range:设置纵轴显示的信号强度范围,例如(0, 20)表示只显示信号强度 0–20 的范围。不填写时会根据当前输入数据自动设置。metrics_box:比较两条质谱时是否显示辅助比较信息。默认True。同时提供base和target时,设置为True会在图中显示辅助比较信息;设置为False时只显示质谱图。overlay:两条质谱是否叠加在同一个坐标轴中,默认False。若设置为True两条质谱会叠加在同一个坐标轴中。
绘图方式
不同类型的质谱适合使用不同的绘图方式。
| 数据类型 | 推荐绘图方式 | 适合观察 |
|---|---|---|
| 轮廓型(profile) 数据 | line | 峰形、噪声、基线和连续信号变化 |
| 质心型(centroid)数据 | stem | 峰位置、峰数量和峰强度 |
Profile 数据
轮廓型(profile)数据保留连续的 m/z 和信号强度信息,可以观察完整的峰形。
建议使用:
plot_mode="line"例如:
from massflow.tools.plot import plot_spectrum
plot_spectrum(
base=dm.ms[0],
plot_mode="line",
mz_range=(400, 410),
metrics_box=False,
)这种方式适合查看:
- 峰形;
- 谱图噪声;
- 基线;
- 平滑前后的变化。
Centroid 数据
质心型(centroid)数据只保留识别出的离子峰及其强度,不再保留完整的连续峰形。
建议使用:
plot_mode="stem"例如:
from massflow.tools.plot import plot_spectrum
plot_spectrum(
base=dm.ms[0],
plot_mode="stem",
mz_range=(400, 410),
metrics_box=False,
)这种方式可以更清楚地观察:
- 峰的位置;
- 峰的数量;
- 不同峰的强度。
因此,峰提取、峰对齐以及后续在共享 m/z 轴上进行的处理结果通常更适合使用棒状图查看。
比较处理前后的质谱
plot_spectrum 可以同时传入处理前后的两条质谱。
例如:
plot_spectrum(
base=before.ms[0],
target=after.ms[0],
mz_range=(400, 410),
plot_mode=["line","stem"],
metrics_box=True,
)同时会生成辅助比较信息:
Range:base质谱的 m/z 范围;Correlation:两条谱强度序列的 Pearson 相关系数;TIC ratio:target总强度 /base总强度;SNR orig:base的信噪比;SNR den:target的信噪比;SNR improvement:target SNR / base SNR。
比较时应尽量保证:
- 使用同一个像素或同一个谱图位置;
- 使用相同的
mz_range; - 使用可以直接比较的纵轴范围;
- 根据数据类型选择正确的
plot_mode。
这样才能判断看到的差异是否确实来自数据处理,而不是来自不同像素或不同绘图范围。
分开显示与叠加显示
默认情况下:
overlay=False两条质谱分别显示,适合观察各自的峰形、峰位置和整体变化。
如果希望将两条质谱绘制在同一个坐标轴中,可以设置:
overlay=True叠加显示可以更直接地观察两条质谱之间的峰位置和信号强度差异。
如果两条质谱的强度差异较大,叠加后不容易观察,可以继续使用默认的 overlay=False。
总体工作流程图
错误处理
- 绘图中
base和target参数应该至少设置一个,如果两者都为None代码会出现报错 spectrum has no data points.:当前质谱没有数据点。可以检查质谱是否读取成功,或者所选择像素位置是否有有效数据No data points in selected 'mz_range'.:设置的 m/z 范围中没有数据。需要根据载入的数据重新设置想要查看的m/z 范围
参考
- tools/plot.py:质谱绘制