美文网首页RNA-seq
R-韦恩图系列-VennDiagram

R-韦恩图系列-VennDiagram

作者: 小贝学生信 | 来源:发表于2021-11-01 15:05 被阅读0次

    R-韦恩图系列-ggVennDiagram - 简书 (jianshu.com)
    R-韦恩图系列-VennDiagram - 简书 (jianshu.com)
    R-韦恩图系列-UpSetR - 简书 (jianshu.com)

    VennDiagram包是绘制韦恩图的一个经典包了。它不是基于ggplot体系,但可以通过转换变为ggplot对象(我更习惯些)。另外每次绘图时,但会生成一个日志log文件,比较麻烦。
    参考教程:https://www.r-graph-gallery.com/14-venn-diagramm.html

    • 示例数据
    # install.packages("VennDiagram")
    library(VennDiagram)
    
    genes <- paste0("gene",1:1000)
    set.seed(20210302)
    gene_list <- list(A = sample(genes,100),
                      B = sample(genes,200),
                      C = sample(genes,300),
                      D = sample(genes,200))
    
    • 简单用法:关键是设置filename参数,如果为正常名,则直接保存文件至本地;如果设置为NULL值,那么会得到gList图像,可配合grid.draw {grid}在R界面显示。但无论哪一种方法都会生成log文件。
    #保存图片至本地
    venn.diagram(gene_list, filename = "test.png")
    
    #在R界面显示
    venn.plot = venn.diagram(gene_list, 
                             filename = NULL)
    grid.draw(venn.plot)
    file.remove(list.files(pattern = "*log"))
    dev.off()
    

    1、类别名 category name

    • 相关参数如下:
    category.names, #类别名内容
    cat.cex = 0.6,  #类别名字体大小(相对1)
    cat.fontface = "bold", #加粗
    cat.col = rainbow(3)
    cat.pos = c(-27, 27, 135),   #0度为12点方向,顺时针旋转
    cat.dist = c(0.055, 0.055, 0.085), #类别名距离圆的距离
    cat.fontfamily = "sans", #字体
    rotation.degree = 60 #旋转角度(逆时针)
    rotation = 1 #适合3 set的情况
    
    • 演示
    venn.plot = venn.diagram(gene_list[1:3], filename = NULL,
                             category.names = LETTERS[1:3],
                             cat.cex = 1.5,
                             cat.fontface = "bold",
                             cat.pos = c(-20, 20, 180),
                             cat.col = rainbow(3))
    grid.draw(venn.plot)
    file.remove(list.files(pattern = "*log"))
    dev.off()
    

    2、圆的相关设置

    • 主要包括圆的填充颜色(离散),边的颜色、形状、粗细
    fill  #填充颜色
    col # 边的颜色
    lwd = 2, #边的宽度
    lty = 'blank', #边的类型 dashed dotted
    
    • 演示
    library(RColorBrewer)
    venn.plot = venn.diagram(gene_list, filename = NULL,
                             fill = brewer.pal(4, "Pastel2"),
                             col = brewer.pal(4, "Pastel2"),
                             lwd = 2, lty = "dashed")
    grid.draw(venn.plot)
    file.remove(list.files(pattern = "*log"))
    dev.off()
    

    如上图,我认为VennDiagramggVennDiagram包最大的不同就在于圆的填充颜色:前者为离散的颜色,而后者为连续渐变颜色(参看上一篇笔记)

    3、交集数值展示的相关设置

    venn.plot = venn.diagram(gene_list,
                             cex = 2,
                             fontface = "bold", 
                             filename = NULL)
    grid.draw(venn.plot)
    file.remove(list.files(pattern = "*log"))
    dev.off()
    

    4、特殊情况 2 sets

    • 如下图所示,当绘制两个set的交集情况时,圆的面积大小与对应数目成正比;
    • 而且当交集数目过小时,会自动使用引导线注释
    gene_list2 <- list(A = sample(genes,20),
                      B = sample(genes,100))
    venn.plot = venn.diagram(gene_list2,
                             filename = NULL)
    grid.draw(venn.plot)
    file.remove(list.files(pattern = "*log"))
    dev.off()
    
    • 可通过ext.系列参数修改这根引导线格式,例如直接取消~
    # ext.text = F
    # ext.percent = 0 重叠数目低于多少百分比,使用线
    # ext.pos
    # ext.line.lwd
    venn.plot = venn.diagram(gene_list2,
                             ext.text = F,
                             filename = NULL)
    grid.draw(venn.plot)
    file.remove(list.files(pattern = "*log"))
    dev.off()
    
    • 当然,如果不想让圆的面积与数值存在这种对应关系,可通过如下方式进行绘制
    venn.plot <- draw.pairwise.venn(
      area1 = 50,
      area2 = 50,
      cross.area = 20)
    dev.off()
    
    #修改展示标签内容
    venn.plot[[5]]$label = length(setdiff(gene_list2[[1]], gene_list2[[2]]))
    venn.plot[[6]]$label = length(setdiff(gene_list2[[2]], gene_list2[[1]]))
    venn.plot[[7]]$label = length(intersect(gene_list2[[1]], gene_list2[[2]]))
    grid.draw(venn.plot)
    file.remove(list.files(pattern = "*log"))
    dev.off()
    

    5、转为ggplot2对象

    library(ggplot2)
    library(ggplotify)
    library(cowplot)
    as.ggplot(plot_grid(grobTree(venn.plot))) +
      ggtitle("This is title")
    

    最后关于韦恩图的标题,venn.diagram函数的mainsub系列参数可以设置;另外由于可以转换为ggplot对象,所以之后使用ggplot title相关函数也可以~

    相关文章

      网友评论

        本文标题:R-韦恩图系列-VennDiagram

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