|
分析背景
集合的可视化,首先想到的肯定是venn图绘制方法。此绘制方法基于R语言,并根据项目经验,将常规的代码语句进行封装。然后将整理好的数据传入到函数中,即可得到高质量的Venn图。但是,当集合数较多如出现7个以上的时候,再使用Venn图就会显得多而散。
针对上面这种情况,我们使用一个用于多个集合数据的可视化小程序——集合图,并且将其封装成函数,同样只需将自己的数据传入到函数中,即可作出整体系统的集合图。
分析方法
# 安装R包 if (!requireNamespace("UpSetR", quietly = TRUE)) install.packages("UpSetR",repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/") if (!requireNamespace("RColorBrewer", quietly = TRUE)) install.packages("RColorBrewer",repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/") if (!requireNamespace("data.table", quietly = TRUE)) install.packages("data.table",repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/") # 自定义函数 ## 快速读入数据 readFlie=function(input,type,row=T,header=T){ # input 为读入文件的路径,type为读入文件的类型,格式为‘.txt’或‘.csv’,row=T,将文件的第一列设置为列名 library(data.table,quietly = TRUE) if(type=='txt'){ dat = fread(input,header = header,sep='\t',stringsAsFactors = F,check.names = F) if(row){ dat = as.data.frame(dat,stringsAsFactors = F) rownames(dat) = dat[,1] dat = dat[,-1] }else{ dat = as.data.frame(dat,stringsAsFactors = F) } }else{ dat = fread(input,header = header,sep=',',stringsAsFactors = F,check.names = F) if(row){ dat = as.data.frame(dat,stringsAsFactors = F) rownames(dat) = dat[,1] dat = dat[,-1] }else{ dat = as.data.frame(dat,stringsAsFactors = F) } } return(dat) } ## 绘制集合图 wn_upset=function(list,bar_cor='lightblue2',point_cor = 'blue',keep.order=F,order.by=c("freq","degree")[1]){ # list 传入数据为一个list # bar_cor 上方条形图的填充颜色 # point_cor 共有集合点阵图的颜色 # keep.order 根据list中的向量顺序展示样本,默认为FALSE,此时按照样本中物种数量由多至少顺序展示 # order.by是否按照频数和度进行排序,默认矩阵先按度,然后按频率排序 # 定义颜色体系 require(RColorBrewer,quietly = T,warn.conflicts =F) corlor = c(brewer.pal(12,'Set3'),brewer.pal(12,'Paired'),brewer.pal(11,'Spectral')) require(UpSetR,quietly = T,warn.conflicts =F) g=upset(fromList(list), nsets = length(list),sets=names(list),keep.order=keep.order, number.angles = 30, point.size = 2.5, line.size = 0.20,mb.ratio = c(0.55, 0.45), text.scale = c(1.5,1, 1.5, 1, 1,1), # 上方条形图的填充颜色 main.bar.color=bar_cor,mainbar.y.label = "Intersection Size", # 下方条形图的填充颜色 sets.bar.color=corlor[1:length(list)], matrix.color=point_cor, sets.x.label = "Set Size", order.by = order.by,shade.color = brewer.pal(9,'BuPu')[2], shade.alpha = 0.70, matrix.dot.alpha = 0.85) return(g) } df = readFlie('./upset.txt',type = 'txt',row = F) # 抽取数据,制造测试数据 set.seed(1234) df_list = list('Symbol1'=sample(df$symbol,180),'Symbol2'=sample(df$symbol,200), 'Symbol3'=sample(df$symbol,220),'Symbol4'=sample(df$symbol,240), 'Symbol5'=sample(df$symbol,260),'Symbol6'=sample(df$symbol,280), 'Symbol7'=sample(df$symbol,300),'Symbol8'=sample(df$symbol,310), 'Symbol9'=sample(df$symbol,150)) # 绘制集合图 # 4维集合图 wn_upset(df_list[1:4]) # 6维集合图 wn_upset(df_list[1:6]) # 9维集合图 wn_upset(df_list) # 保存图片 pdf('./up_set.pdf',height = 9,width = 16) # 8维集合图 wn_upset(df_list[1:8]) dev.off()
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-13 15:02
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社