R语言数据可视化-Upset图
我要给你安利一个R语言绘图的超实用干货——集合可视化的神器:UpSetR包!🌟
它能够优雅地处理集合间的交集、并集,让数据的对比和关系一目了然。🎨告别那些让人眼花缭乱的传统图表,用UpSetR包让你的数据图形简洁又美观,还能轻松展示出更多的信息。✨
🚀 特点速览:
1️⃣ 直观展示集合关系
2️⃣ 动态交互,探索数据更深入
3️⃣ 自定义设置,满足你的个性化需求
4️⃣ 一键导出,分享你的发现
🔬 数据分析,不再只是数字游戏,让我们一起用UpSetR包,把数据变成故事,讲述属于你的见解。📚
关于不同集合之间的交集关系,相信大家都常见到。
而最常用于了解交集的图表应该就是文氏图(Venn diagram)【往期文章:文氏图_1; 文氏图_2】,可是一旦集合数超过4个以上,文氏图解读起来就没那么轻松了。因为3个集之间的可能交集只有8种,但如果是10个集,它们之间的可能交集高达1024种(即 2n )![1]。
此时就可以考虑使用UpSet plots[2]。
今天介绍一个发表在《Bioinformatics》上的R包{UpSetR}[3-4],轻松处理3个以上集合的交集关系。
首先,安装R包并且载入:
install.packages("UpSetR")
library(UpSetR)
UpSet图是一种用于展示不同组之间共有和特有部分的可视化方式,它是韦恩图的另一种替代方式。UpSet图可以用于展示3-7组(目前设置最大的是7组)之间的共有和独有的情况。UpSet图主要包含三个部分:上部分为各个分组独有和共有的数量,下部分为各个分组独有和共有的分类情况,左部分(或者右部分)代表各个分组中包含的没有重复的元素数量。每一列都是一个分组,而每一行则代表一个元素。
在UpSet图中,可以通过柱状图和点的结合来展示各个分组之间的交集情况。柱状图的高度表示某个分组中独有或共有的元素数量,而点则用于表示元素在各个分组中的分布情况。通过点的位置和连接关系,可以直观地看出各个分组之间的交集情况。
在R中,可以使用UpSetR包来绘制UpSet图。UpSet图的优势在于它可以展示多个分组之间的交集情况,并且可以直观地比较各个分组之间的差异和相似之处。此外,UpSet图还可以通过排序和筛选等功能来进一步优化可视化效果。
论文
A highly conserved core bacterial microbiota with nitrogen-fixation capacity inhabits the xylem sap in maize plants
https://www.nature.com/articles/s41467-022-31113-w
本地pdf s41467-022-31113-w.pdf
用到的是UpSetR包:https://github.com/hms-dbmi/UpSetR。 upset
参数:
nsets: 最多展示多少个集合数据。
nintersects: 展示多少交集。
mb.ratio: 点点图和条形图的比例。
order.by: 交集如何排序。这里先根据freq,然后根据degree
decreasing: 变量如何排序。这里表示freq降序,degree升序
使用的是自带的Demo数据,name是的电影名,第二列是电影的发布时间,后面跟着十几个电影类型,最后两列是average rating以及观看数量,这里需要注意的是upset绘图选取的列只使用二进制列(仅包含 0 和 1)和逻辑列,这里也就是电影类型。
图形解读:黑色表示该位置有数据,灰色的点表示没有。不同点连线表示存在交集。具体数据可以看上面的条形图。不同类型的数据的总量看左边的条形图。
install.packages("UpSetR")
library(UpSetR)
library(ggplot2)
library(plyr)
library(gridExtra)
library(grid)
movies inputFile=files[i]if(inputFile==outFile){next} rt=read.table(inputFile,header=F) 读取输入文件 geneNames=as.vector(rt[,1]) 提取基因名称 geneNames=gsub("^ | $","",geneNames) 去掉基因首尾的空格 uniqGene=unique(geneNames) 基因取unique,唯一基因列表 header=unlist(strsplit(inputFile,"\\.|\\-")) geneList[[header[1]]]=uniqGene uniqLength=length(uniqGene) print(paste(header[1],uniqLength,sep=" "))}