专栏名称: 生信技能树
生物信息学学习资料分析,常见数据格式及公共数据库资料分享。常见分析软件及流程,基因检测及癌症相关动态。
目录
51好读  ›  专栏  ›  生信技能树

复杂生物数据的Python创新可视化工具Marsilea正式发表在Genome Biology啦!

生信技能树  · 公众号  ·  · 2025-01-08 16:22

正文

上次我们介绍了 谁说Python不擅长绘图,Marsilea带给Python的生物数据可视化革命! 阅读量马上就破万,充分说明了Python编程语言体系里面的可视化确实是急缺变革性产品。目前的3大绘图模块, Matplotlib, Seaborn, Plotnine 掌握好了之后就可以搭配我们今天继续推荐的复杂生物数据的Python创新可视化工具Marsilea。

作者:郑易民 Yimin Zheng,郑志航 Zhihang Zheng,André F. Rendeiro(通讯),张仲荣Edwin Cheung(通讯)

单位:

  1. 澳门大学健康科学学院:郑易民,张仲荣
  2. 奥地利国家分子生物学研究中心CeMM:郑易民,André F. Rendeiro
  3. 香港科技大学(广州):郑志航

期刊名称:Genome Biology

链接:https://genomebiology.biomedcentral.com/articles/10.1186/s13059-024-03469-3

GitHub链接:https://github.com/Marsilea-viz/marsilea

Marsilea简单概念动图:

随着数据集规模和复杂性的指数级增长,科学研究和数据分析领域对数据可视化工具提出了更高的要求。然而,传统的数据可视化工具在处理多特征、多维度数据时往往面临显著挑战,难以直观展示数据之间复杂的交互关系或揭示隐藏的模式。 这些工具通常局限于单一维度或特定领域,无法全面支持科学研究中多样化的需求,导致研究人员不得不借助多种工具完成数据展示,既耗时又容易产生割裂的体验。

为了解决这一痛点,澳门大学郑仲荣研究团队与奥地利CeMM的André F. Rendeiro团队创新性地提出了跨布局可视化(Cross-Layout Visualization)这一全新范式,旨在通过将多个图表整合于统一框架中,提供更直观、灵活的复杂数据展示方法。 基于这一范式,团队开发了名为Marsilea的 Python 可视化库,专注于帮助研究人员高效生成具有高度定制化和可扩展性的复杂可视化图表。本文将对这一创新范式及其广泛应用进行详细解读。

Cross layout概念图

figure 1

Marsilea 的设计理念与功能亮点:

1.模块化与多样性

Marsilea 的设计注重模块化,允许用户根据需求逐步添加绘图组件。 它内置了多种图表类型,包括四种变体的热图、折线图、柱状图、小提琴图、弧形图、文本标签和序列标志等,满足多种场景需求。 除此之外,用户还可以根据自己需求轻松集成新的自定义绘图类型,极大地拓展了工具的适用范围。

2.广泛的数据兼容性

支持多种输入格式,从基本的 Python 列表到 NumPy 数组和 Pandas 数据框,轻松融入现有数据分析流程。

3.双模式界面

Marsilea 提供面向编程用户的面向对象 API,同时也为非程序员提供了无代码的 Web 界面,使得不同得用户群体都能方便使用。

  1. 高效代码和用户友好性

与之前的传统可视化工具相比,Marsilea 显著减少了代码量。例如,在对比同样的可视化任务时,Marsilea 所需的代码量只有 Matplotlib 的一半,同时提供了更高的定制性和直观性。

以下是使用Marsilea包进行不同类型 数据可视化的例子 (可参考:https://marsilea.readthedocs.io/en/stable/examples/Gallery/index.html )里面的每个案例都自带测试数据和代码,让你无缝连接掌握具体可视化用法:

复杂生物数据的高效可视化

例子1:单细胞 RNA 表达数据

研究团队使用单细胞 RNA 表达数据集(PBMC3K)生成复杂热图,展示了不同细胞类型的标记基因(marker gene),并分层显示细胞系谱信息。整个绘图过程仅需 12 行代码,且支持快速调整绘图尺寸、布局间距、绘图顺序等。Marsilea还支持与Scanpy联合使用,详情参考:https://scanpy.readthedocs.io/en/latest/how-to/plotting-with-marsilea.html

plot pbmc3k

配套代码是:

import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize
import marsilea as ma
import marsilea.plotter as mp

from sklearn.preprocessing import normalize


pbmc3k = ma.load_data("pbmc3k")
exp = pbmc3k["exp"]
pct_cells = pbmc3k["pct_cells"]
count = pbmc3k["count"]

matrix = normalize(exp.to_numpy(), axis=0)
 ....
 ....
mark_high = mp.MarkerMesh(matrix > 0.7, color="#DB4D6D", label="High")
cell_count = mp.Numbers(count["Value"], color="#fac858", label="Cell Count")
cell_exp = mp.Violin(
    exp, label="Expression", linewidth=0, color="#ee6666", density_norm="count"
)
cell_types = mp.Labels(cell_names, align="center")
gene_names = mp.Labels(exp.columns)

# Group plots together
h = ma.Heatmap(
    matrix, cmap="Greens", label="Normalized\nExpression", width=4.5, height=5.5
)
h.add_layer(cells_proportion)
h.add_layer(mark_high)
h.add_right(cell_count, pad=0.1, size=0.7)
h.add_top(cell_exp, pad=0.1, size=0.75, name="exp")
h.add_left(cell_types)
h.add_bottom(gene_names)

h.group_rows(cell_cat, order=["Lymphoid""Myeloid"])
h.add_left(mp.Chunk(["Lymphoid""Myeloid"], ["#33A6B8""#B481BB"]), pad=0.05)
h.add_dendrogram("left", colors=["#33A6B8""#B481BB"])
h.add_dendrogram("bottom")
h.add_legends("right", align_stacks="center", align_legends="top", pad=0.2)
h.set_margin(0.2)
h.render()

# h.get_ax("exp").set_yscale("symlog")

例子2:单细胞多组学数据分析

使用来自 COVID-19 患者的多组学数据(包含蛋白组学和转录组学信息),研究团队创建了由两个跨布局拼接而成的热图,对两种组学特征进行并列比较,并叠加细胞元簇、细胞丰度和基因表达等信息。

plot sc multiomics

扩展传统领域的专业绘图

重现其它专业工具的绘图能力,如:

序列基序(sequence motifs):重现 ggmsa 工具的可视化。

plot seqalign

图片链接:https://marsilea.readthedocs.io/en/stable/_images/sphx_glr_plot_seqalign_001_2_00x.png

集合交集图:重现Upset可视化。

plot upset

突变-表达联合图(oncoprint):重现cBioPortal可视化。

plot oncoprint

社会网络图:展示角色关系网络(如《悲惨世界》)。

plot arc diagram

此外还有创新数据展示

例如,通过42种食用油的脂肪含量数据,研究团队创建了具有层次聚类的堆叠条形图,展示健康和不健康成分(如 Omega 3 和反式脂肪)的分布,并分组显示适合不同烹饪方式的油类。

plot oil well

和色盲友好设计







请到「今天看啥」查看全文