pythonic生物人

复现顶刊这张图,换数据即可用!

本次介绍利用Python实现CNS常客—Upset图,例如,

Image
Mayassi, T., Li, C., Segerstolpe, Å. et al. Spatially restricted immune and microbiota-driven adaptation of the gut. Nature 636, 447–456 (2024). https://doi.org/10.1038/s41586-024-08216-z

UpSet图通过柱状图结合交集指示器,系统化展示集合间的交互和交集数量,特别是在集合数量较多或关系复杂的情况下,能够有效解决Venn图重叠过多的问题,提供更加清晰直观的可视化效果。

如下图,当集合数量为5个、6个和9个时,Upset图清晰直观的效果一目了然。

Image

怎么画图:节选自教程中的第24章👉Python matplotlib保姆级教程,使用章节“3.2.15 set_venn数据集”,展示5组数据UpSet图,核心代码,

# 24.2_01
# -*- encoding: utf-8 -*-
'''
未经过允许禁止转载!
@Author  :   公众号: pythonic生物人
@Desc    :   24.2 UpSet图
'''

from upsetplot import from_contents, plot
import matplotlib.pyplot as plt

# 数据准备
organized_data = {
    set_name: set(group['Element'])
    for set_name, group in set_venn.groupby('Set')
}
upset_data = from_contents(organized_data)  #转换为upsetplot支持的数据格式

# 绘图
upset_plot = plot(
    upset_data,  # 传入数据,创建UpSet图
    subset_size='count',  # 显示子集大小,'count'表示显示每个交集的数量
    show_counts=True,  # 显示每个交集的计数
    #show_percentages='{:.1%}',  # 注释掉的代码:显示百分比,'{:.1%}'表示显示为百分比,保留一位小数
    sort_by="cardinality",  # 按交集大小排序,'cardinality'表示按交集元素的数量排序
    sort_categories_by="-cardinality",  # 按原集合大小排序,"-cardinality"表示按集合大小倒序排序
    facecolor="#b1283a")  # 设置UpSet图的背景颜色,"#006a8e"是深蓝色

#个性化设置
upset_plot["intersections"].set_ylabel("集合交集大小")  #设置右上图y轴标题
upset_plot["totals"].set_xlabel("原集合大小")  #设置左图x轴标题

plt.rcParams['figure.dpi'] = 300
plt.title("UpSet图", fontsize=15, y=1.1) #设置标题
plt.gca().grid(False)
plt.gcf().patch.set_edgecolor('gray')  # 设置边框颜色为灰色
plt.gcf().patch.set_linewidth(0.8)  # 设置边框宽度

plt.show()

Image

怎么看图:左半部分是这5组集合数据数量的柱状图,右边下半部分是这些集合数据的交集指示器,有颜色的点的连线就代表有交集,右边上半部分就代表这个交集的数量的柱状图。

如果还是不能理解,看下图,通过同效果的左侧venn图类比右侧upset图。

Image

-END-
获取绘图代码+测试数据+数据处理方法+依赖包安装方法,

👇(备注:399)

图片

分享3个Python/R优质可视化技巧👇,

👉R可视化教程:28个章节+11w字+数百张图

图片
图片

👉matplotlib教程:20w字+数百张图形+1W行代码+详细代码注释+学习交流群

图片

👉seaborn教程:12.3万字+500多张图形+8000行代码

图片

加入学习?

图片