一、UpSetPlot-让Python轻松绘制upset图 前言 今天是我的可视化课程上线的第249天,目前学员425 人,每篇原创公众号都会记录这个人数,用来督促和激励我的原创内容。目前课程的主要方向是 科研、统计、地理相关 的学术性图形绘制方法,后续也会增加商务插图、机器学等、数据分析 等方面的课程。课程免费新增,这点绝对良心!
今天是我的可视化学习社群上线的第28天,目前学员128 人,可视化学习社区以我的书籍《科研论文配图绘制指南-基于Python》 为基础进行拓展,提供课堂式 教学视频,还有更多拓展内容,可视化技巧远超书籍本身,书籍修正和新增都会分享到圈子里面~~
参与课程或者圈子的你将获取到:学员答疑、可视化资源分享、可视化技巧补充、可视化业务代做(学员和甲方对接)、副业交流、提升认知 等等。
UpSetPlot-让Python轻松绘制upset图 很多我们课程的学员或者书籍打卡圈子里的同学,都在问我有没有Upset图(UpSet Plot)的绘制方法? 。确实,无论是书籍还是对应的可视化课程,Upset图都被我忘记了···,感觉补上。
首先,我们需要知道什么是Upset图?UPSet图形 是一种可视化工具,用于展示多个集合之间的共享和差异。它可以帮助我们理解集合之间的交集、并集和差集关系。
UPSet图形通常由两部分组成:矩阵 和线性图 。
「矩阵」 :矩阵部分是一个二维表格,其中每一行代表一个集合,每一列代表一个元素或特征。表格中的每个单元格表示该元素是否属于对应集合。常用的表示方法是使用1和0来表示属于 和不属于 。
「线性图」 :线性图部分展示了各个集合之间的共享和差异情况。每个集合在图中用一个条形表示,条形的长度表示该集合中元素的数量。条形之间通过连线表示集合之间的共享元素,而没有连线的部分表示集合之间的差异。
理解和解读UPSet图需要注意以下几个方面:
数据集合的数量和交集关系 :UPSet图的主要目的是展示多个数据集合之间的共同元素和交集关系。首先,观察UPSet图中的集合数量和它们之间的交集情况。可以通过X轴上的面积大小来判断集合的大小,以及通过连接线的数量和位置来了解它们之间的交集关系。
交集元素的数量 :UPSet图中的每个子集区域代表一个数据集合,而连接线表示这些数据集合之间的交集元素。观察连接线的数量和位置可以了解交集的情况。例如,如果有多个连接线汇集在一起,表示这些数据集合具有较大的交集。
元素数量的比例 :除了交集元素的数量,还可以通过区域的面积来了解数据集合的元素数量。UPSet图中,区域的面积越大,表示对应的数据集合包含的元素越多。
集合的排序和顺序 :UPSet图中的集合可以按照特定的顺序排列,你可以根据需要调整集合的顺序,以更好地展示交集关系。观察集合的排序和顺序,可以帮助你更好地理解数据集合之间的关系。
图例和标签 :UPSet图通常包括图例和标签,帮助解读图形。图例展示了每个数据集合的标识符及其对应的颜色,而标签显示了各个数据集合的具体名称。参考图例和标签,可以更准确地理解UPSet图中的各个部分。
附加信息 :除了上述基本要素,UPSet图还可以包含其他附加信息,例如悬停提示和点击事件等。通过与图形的交互,可以进一步了解每个数据集合的详细信息。
upset样图 UPSet图形可以提供以下信息:
共享元素 :通过连线可以清晰地看到哪些元素同时存在于多个集合中。集合大小 :线性图中的条形长度反映了每个集合中元素的数量,从而可以对比集合的大小。集合之间的差异 :通过线性图中没有连线的部分可以看出哪些元素只存在于单个集合中,从而展示集合之间的差异。UPSet图形在生物信息学、数据分析和数据挖掘等领域得到广泛应用。它可以帮助我们发现和分析多个数据集之间的交集和差异,从而揭示数据中的模式和关联关系。
那么,我们该如何绘制UPSet图形呢?
在Python中,可以使用UpSetPlot
库来创建UPSet图形。该库提供了灵活的函数和方法,可以根据需求自定义UPSet图形的样式和布局。
pip install upsetplot
UpSetPlot库官网提供了多个绘制案例,小编这里就简单的给大家列举一下:
Plot the distribution of missing values from matplotlib import pyplot as plt from upsetplot import generate_counts, plot example = generate_counts() plot(example, show_counts=True) plt.suptitle('Nothing hidden' ) plt.show()
Hiding subsets based on size or degree from matplotlib import pyplot as plt from upsetplot import generate_counts, plot example = generate_counts() plot(example, facecolor="darkblue" ) plt.suptitle('facecolor="darkblue"' ) plt.show()
Changing Plot Colors
with plt.style.context('dark_background' ): plot(example, show_counts=True, facecolor="red" , other_dots_color=.4, shading_color=.2) plt.suptitle('dark_background, red face, stronger other colors' ) plt.show()
upset = UpSet(example, facecolor="gray" ) upset.style_subsets(present="cat0" , label="Contains cat0" , facecolor="blue" ) upset.style_subsets(present="cat1" , label="Contains cat1" , hatch="xx" ) upset.style_subsets(present="cat2" , label="Contains cat2" , edgecolor="red" )# reduce legend size: params = {'legend.fontsize' : 8} with plt.rc_context(params): upset.plot() plt.suptitle("Styles for every category!" ) plt.show()
Highlighting selected subsets 更多关于UpSetPlot包的语法和案例,感兴趣的同学可参考:UpSetPlot官网 [1]
可视化学习圈子是干什么的? 科研论文配图书籍学习圈子主要通过以下几个方面,给大家带来比纸质书籍更丰富的学习内容:
「PS」 :我们直播教学内容为课堂式 教学,原作者 带着大家对书籍一章、一节、一页的进行教学。而且直播的视频都会通过剪辑后整理成课程,圈子中的同学可以免费、反复观看。当然,新增内容和定期答疑,直播也是如此。
为何会有这个书籍学习社群?无门槛的微信群难免会鱼龙混杂,问题和质量都无法得到保证,而且一些关键问题经常被淹没,且没有沉淀价值。
随着添加我微信的人日益增多,向我提问的人也越来越多,随便回答一下就太不负责任了;不回答也不是很好;如果都仔细回答,我也有自己的工作并且确实很忙,真的有点心有余而力不足!所以我才会建立这么一个渠道来沉淀我的可视化技巧和分享经验,以及给大家提供一个坚持学习的平台。
微信扫码下方二维码即可参与我们的书籍学习圈子啦:
系统学习可视化 当然,在学习数据可视化的道路上,你也有很多问题得不到解答,也可以加入我们的可视化课程(可视化系列课程推文 )后,在学员群里和大家一起谈论,一起进步,或者直接向我提问。如果我觉得你的问题很具有普适性,我会把它写成文章发布在公众号上,让更多人看到,有关我们数据可视化系列课程的服务内容,可以参考下面的 阅读原文 。
猜你喜欢 Antarctic-Plots!不用ArcGIS,我照样可以画出惊艳的地图...
比Matplotlib合并子图更方便!patchworklib让我告别PS拼图... Xarray,不用ArcGIS,所有地理空间绘图全搞定... Nature都推荐的箱线图(Boxplot)绘制工具长啥样?免费、在线、灵活操作...? 集成Matplotlib、Bokeh、Plotly!这个交互式可视化工具这么强的吗? 完美解决Matplotlib绘图中、英文字体混显问题.. MATLAB绘图不好看?!不是,你是还没发现这几个工具包吧.. 不是,这个地理数据工具这么强的吗?数据处理、可视化它都行.. 这种环形图太难画?!带你一行代码搞定..
这种图太多人问了,绘制方法真的很简单.. 不是,这封面图这么多人问的吗?教程来了 不用Seaborn,这个工具也能绘制超炫的统计图形··· NetworkX,网络结构图最强绘制工具····· 所有科研地理图形它都有,这个工具有点猛···· Nature、Science配图可以一键绘制?!我懵了··· 节后第一天,就因为论文配图,被导师怼了一上午····· plotnine,打死不学R语言, 我可以用Python到40岁..... TUEplots,一天100张论文配图,导师惊了···
参考资料 [1] UpSetPlot官网: https://upsetplot.readthedocs.io/en/stable/。