美文网首页
交集展示——韦恩图与集合图

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

作者: 芋圆学徒 | 来源:发表于2021-03-26 21:09 被阅读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是怎么写的

    相关文章

      网友评论

          本文标题:交集展示——韦恩图与集合图

          本文链接:https://www.haomeiwen.com/subject/rvcoxltx.html