CNS必备UpSet图,这样画,这样看!
本次介绍利用Python matplotlib + UpSetPlot实现CNS常客——Upset图,例如,
UpSet图通过柱状图结合交集指示器,系统化展示集合间的交互和交集数量,特别是在集合数量较多或关系复杂的情况下,能够有效解决Venn图重叠过多的问题,提供更加清晰直观的可视化效果。
如下图,当集合数量为5个、6个和9个时,Upset图清晰直观的效果一目了然。
怎么画图:节选自教程中的第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()
怎么看图:左半部分是这5组集合数据数量的柱状图,右边下半部分是这些集合数据的交集指示器,有颜色的点的连线就代表有交集,右边上半部分就代表这个交集的数量的柱状图。
如果还是不能理解,看下图,通过同效果的左侧venn图类比右侧upset图。
-END-
推荐阅读: 👉Python matplotlib保姆级教程