交集展示——韦恩图与集合图

2021-03-26  本文已影响0人  芋圆学徒

对于集合的可视化,第一时间想到的都是韦恩图(venn diagram),一般集合不超过5个的时候,可视化效果还是不错的;但是一旦数据集增加,比如说五个的时候,你就很难从图中解读出想要的信息了。即便你把它画的很美观,还是还是很难直观找到自己需要的信息。可视化的目的不是炫技,而是快速理解数据。
The R Graph Gallery
213维恩图和集合图(Venn&Upset)

目录

  1. Venn图
  2. UpSet图

一 、Venn图

VennDiagram 包
R语言:VennDiagram绘制venn图
venn.diagram rdocumentation

1.参数介绍

#加载包
install.packages("VennDiagram")
library(VennDiagram)
#数据准备
set1 <- paste(rep("word_" , 200) , sample(c(1:1000) , 200 , replace=F) , sep="")
set2 <- paste(rep("word_" , 200) , sample(c(1:1000) , 200 , replace=F) , sep="")
set3 <- paste(rep("word_" , 200) , sample(c(1:1000) , 200 , replace=F) , sep="")
set4 <- paste(rep("word_" , 200) , sample(c(1:1000) , 200 , replace=F) , sep="")
set5 <- paste(rep("word_" , 200) , sample(c(1:1000) , 200 , replace=F) , sep="")
#颜色设置
library(RColorBrewer)
color <- brewer.pal(3, "Set3")

# Chart
venn.diagram(
        x = list(set1, set2, set3),
        category.names = c("Set 1" , "Set 2 " , "Set 3"),
        filename = 'venn2.png',
        output=TRUE,
        
        # 输出
        imagetype="png" ,  # 类型(tiff png svg)
        #height = 1000 ,   # 高度
        #width = 1000 ,   # 宽度
        resolution = 400,  # 分辨率
        compression = "lzw",  # 压缩算法
        
        # 圈
        lwd = 5,  # 圈线条粗细 1 2 3 4 5
        lty = 1,  # 线条类型, 1 实线, 2 虚线, blank 无线条
        fill = color,  # 填充色
        col = c("red", 'green', 'blue'),  # 线条色

        # 数字 number
        cex = 2,  # 数字大小
        fontface = "bold",  # 加粗
        fontfamily = "sans",  # 字体

        # 标签 category
        cat.cex = 2,  # 字体大小
        cat.col = c("red", 'green', 'blue'),  # 字体色
        cat.fontface = "bold",  # 加粗
        cat.default.pos = "outer",  # 位置, outer 内 text 外
        cat.pos = c(-27, 27, 135),  # 位置,用圆的度数
        cat.dist = c(0.055, 0.055, 0.085),  # 位置,离圆的距离
        cat.fontfamily = "sans",  # 字体
        rotation = 1  # 1 2 3 旋转确定大打头数据集
)
venn.png
#图片保存
library(RColorBrewer)
######################图片暂存
p = venn.diagram(
  x = list(set1, set2, set3, set4, set5),
  category.names = c("Set 1" , "Set 2 " , "Set 3", "Set 4", "Set 5"),
  # filename = 'venn.png',
  filename = NULL,
  output=TRUE,

  fill = brewer.pal(5, "Set2"),
  col = brewer.pal(5, "Set3"),
  fontface = "bold",
  cat.col = brewer.pal(5, "Set3"),
  cat.fontface = "bold"
)
#################保存为PDF
pdf("venn1.pdf")
grid.draw(p)
dev.off()
#################保存为png
pdf("venn2.pdf")
grid.draw(p)
dev.off()

二、 UpSet图

1、 UpSetR包 UpSetR:集合可视化神包

参数介绍

upset(data, nsets = 5, nintersects = 40, sets = NULL,
keep.order = F, set.metadata = NULL, intersections = NULL,
matrix.color = "gray23", main.bar.color = "gray23",
mainbar.y.label = "Intersection Size", mainbar.y.max = NULL,
sets.bar.color = "gray23", sets.x.label = "Set Size",
point.size = 2.2, line.size = 0.7, mb.ratio = c(0.7, 0.3),
expression = NULL, att.pos = NULL, att.color = main.bar.color,
order.by = c("freq", "degree"), decreasing = c(T, F),
show.numbers = "yes", number.angles = 0, group.by = "degree",
cutoff = NULL, queries = NULL, query.legend = "none",
shade.color = "gray88", shade.alpha = 0.25, matrix.dot.alpha = 0.5,
empty.intersections = NULL, color.pal = 1, boxplot.summary = NULL,
attribute.plots = NULL, scale.intersections = "identity",
scale.sets = "identity", text.scale = 1, set_size.angles = 0,
set_size.show = FALSE, set_size.numbers_size = NULL,
set_size.scale_max = NULL)

#########其中较为常用的参数介绍
nsets: 最多展示多少个集合数据。毕竟原来有20多种电影类型,放不完的
nintersects: 展示多少交集。
mb.ratio: 点点图和条形图的比例。
order.by: 交集如何排序。这里先根据freq,然后根据degree
decreasing: 变量如何排序。这里表示freq降序,degree升序

输入数据类型

UpsetR接受三种类型的数据输入:

  1. 表格形式,在R语言里就是数据框了。行表示元素,列表示数据集分配和额外信息。
  2. 元素名的集合(没见过,不知道。。)fromList
  3. venneuler包引入的用于描述集合交集的向量fromExpression。

第一种输入数据,表格型输入数据

install.packages("UpSetR")
require(ggplot2); require(plyr); require(gridExtra); require(grid);require(UpSetR)
movies <- read.csv(system.file("extdata","movies.csv",package = "UpSetR"), header = TRUE, sep=";")
upset(movies)
数据展示

可以看到这里的示例数据,行是要取交集的对象即电影名称,列是每个对象的具体信息(上映年份,动作片,恐怖片,爱情片等等),一般只有两个取值,1或0,是与否

第一种输入数据.png

第二种输入数据,fromExpression对向量进行转化

input <- c(
  "MAQ"=144600,
  "FaSD"=16532, 
  "Bcftools"=283, 
  "GATK"=15160, 
  "MAQ&FaSD"=16323, 
  "MAQ&Bcftools"=636, 
  "Bcftools&GATK"=65435, 
  "FaSD&GATK"=33874, 
  "MAQ&FaSD&Bcftools"=114, 
  "MAQ&FaSD&GATK"=41858, 
  "MAQ&Bcftools&GATK"=4, 
  "FaSD&Bcftools&GATK"=6603, 
  "MAQ&FaSD&Bcftools&GATK"=8357
)
data <- fromExpression(input)
upset(data)

向量经fromExpression转换后.png

可以看到,转换后的数据行名是每个对象,比如可以是基因,列名则是每个对象的具体情况,比如基因A在算法1,算法2,算法3中是否差异,是否富集等信息。


第二种输入数据.png

进一步探究如何将年份这个变量加进这张图可以参考UpSetR:集合可视化神包

2、upsetplot包——Y叔 ChIPseeker的upsetplot是怎么写的

上一篇下一篇

猜你喜欢

热点阅读