本期介绍利用UpsetR包大于5个样本的“维恩图”,即集合图
上期“【R语言】——VennDiagram包绘制维恩图(Venn diagram)保姆级教程”介绍2-5个样本绘制维恩图的方法,但当样本超过5个时,常规维恩图可视化结果的直观性及数据的捕捉就很困难,甚是不友好。因此,可采用一种特殊的“维恩图”——集合图(upset plot)。
集合图(upset plot),集合图不受样本数量的限制。可以更直观的显示各组数据之间的交互情况。可以更清晰的展示多个数据集的交集情况。
下图为集合图的说明:
1 数据准备
数据输入格式(xlsx格式):
2 R包加载及数据导入
#下载包#
install.packages("UpSetR")
install.packages("RColorBrewer")
install.packages("openxlsx")
#载入包#
library(UpSetR)
library(openxlsx)
library(RColorBrewer)
#读取数据#
data<-read.xlsx('C:/Rdata/jc/Venn.xlsx',sheet= "Sheet7",sep=',')
head(data)
3 集合图绘制
upset(fromList(data))#基础图
图1 集合图基础图
#调整与美化后的集合图#
upset(fromList(data),
nsets=length(data),#显示数据集的所有数据,nsets = 数值调整可视化数据集数量
nintersects=30,#显示前多少个
sets=c("set1","set2","set3","set4","set5","set6"), # 指定集合或用keep.order = TRUE保持集合按输入的顺序排序
number.angles = 0, #交互集合柱状图的柱标倾角
point.size=4, #图中点的大小
line.size=1, #图中连接线粗细
mainbar.y.label="Intersection size", #y轴的标签
main.bar.color = 'black', #y轴柱状图颜色
matrix.color="black", #x轴点的颜色
sets.x.label="Set size", #x轴的标签
sets.bar.color=brewer.pal(6,"Set1"),#x轴柱状图的颜色;Set1中只有9个颜色,Set3中有12个颜色,Paired中有12个颜色
mb.ratio = c(0.7, 0.3), #bar plot和matrix plot图形高度的占比
order.by = "freq", #y轴矩阵排序,如"freq"频率,"degree"程度
text.scale=c(1.5,1.5,1.5,1.5,1.5,1), #6个参数intersection size title(y标题大小),intersection size tick labels(y刻度标签大小), set size title(set标题大小), set size tick labels(set刻度标签大小), set names(set 分类标签大小), numbers above bars(柱数字大小)的设置
shade.color="red" #图中阴影部分的颜色
)
图2 调整与美化后的集合图
#高亮显示特定几个集合的交集
upset(fromList(data),
nsets=length(data),#显示数据集的所有数据,nsets = 数值调整可视化数据集数量
nintersects=30,#显示前多少个
sets=c("set1","set2","set3","set4","set5","set6"), # 指定集合或用keep.order = TRUE保持集合按输入的顺序排序
number.angles = 0, #交互集合柱状图的柱标倾角
point.size=4, #图中点的大小
line.size=1, #图中连接线粗细
mainbar.y.label="Intersection size", #y轴的标签
main.bar.color = 'black', #y轴柱状图颜色
matrix.color="black", #x轴点的颜色
sets.x.label="Set size", #x轴的标签
sets.bar.color=brewer.pal(6,"Set1"),#x轴柱状图的颜色;Set1中只有9个颜色,Set3中有12个颜色,Paired中有12个颜色
mb.ratio = c(0.7, 0.3), #bar plot和matrix plot图形高度的占比
order.by = "freq", #y轴矩阵排序,如"freq"频率,"degree"程度
text.scale=c(1.5,1.5,1.5,1.5,1.5,1), #6个参数intersection size title(y标题大小),intersection size tick labels(y刻度标签大小), set size title(set标题大小), set size tick labels(set刻度标签大小), set names(set 分类标签大小), numbers above bars(柱数字大小)的设置
shade.color="red", #图中阴影部分的颜色
queries=list(list(query=intersects,params=list("set1","set2"),color="red",active=T),#设置自己想要展示的特定组的交集,通过queries参数进行设置,需要展示几个关注组合的颜色,就展示几个
list(query=intersects,params=list("set2","set3"),color="blue",active=T),
list(query=intersects,params=list("set6","set5"),color="green",active=T),
list(query=intersects,params=list("set4","set6","set1"),color="yellow",active=T),
list(query=intersects,params=list("set4","set5","set6"),color="purple",active=T),
list(query=intersects,params=list("set4","set5","set3"),color="orange",active=T) )
)
图3 高亮特定交集
#总结#
upset(fromList(data),
nsets=length(data),#显示数据集的所有数据,nsets = 数值调整可视化数据集数量
nintersects=30,#显示前多少个
sets=c("set1","set2","set3","set4","set5","set6"), # 指定集合或用keep.order = TRUE保持集合按输入的顺序排序
number.angles = 0, #交互集合柱状图的柱标倾角
point.size=4, #图中点的大小
line.size=1, #图中连接线粗细
mainbar.y.label="Intersection size", #y轴的标签
main.bar.color = 'black', #y轴柱状图颜色
matrix.color="black", #x轴点的颜色
sets.x.label="Set size", #x轴的标签
sets.bar.color=brewer.pal(6,"Set1"),#x轴柱状图的颜色;Set1中只有9个颜色,Set3中有12个颜色,Paired中有12个颜色
mb.ratio = c(0.7, 0.3), #bar plot和matrix plot图形高度的占比
order.by = "freq", #y轴矩阵排序,如"freq"频率,"degree"程度
decreasing = c(T,F), #以上排序是否降序c(FALSE,TRUE)
text.scale=c(1.5,1.5,1.5,1.5,1.5,1), #6个参数intersection size title(y标题大小),intersection size tick labels(y刻度标签大小), set size title(set标题大小), set size tick labels(set刻度标签大小), set names(set 分类标签大小), numbers above bars(柱数字大小)的设置
shade.color="red", #图中阴影部分的颜色
boxplot.summary = c('set2','set3'), #添加箱线图展示数据分布,最多展示两个数据集
queries=list(list(query=intersects,params=list("set1","set2"),color="red",active=T),#设置自己想要展示的特定组的交集,通过queries参数进行设置,需要展示几个关注组合的颜色,就展示几个
list(query=intersects,params=list("set2","set3"),color="blue",active=T),
list(query=intersects,params=list("set6","set5"),color="green",active=T),
list(query=intersects,params=list("set4","set6","set1"),color="yellow",active=T),
list(query=intersects,params=list("set4","set5","set6"),color="purple",active=T),
list(query=intersects,params=list("set4","set5","set3"),color="orange",active=T) )
)
好了本次分享就到这里。
关注公众号,发送“核估计密度图”获得完整代码