美文网首页数据分析R代码R语言做图
R语言画维恩图--VennDiagram

R语言画维恩图--VennDiagram

作者: MLD_TRNA | 来源:发表于2021-07-04 19:50 被阅读0次

    R语言中有很多程序包(package)可以做这个事情,包括limma, gplots, venneuler, 还有今天我们下面要介绍的VennDiagram包。各个工具用起来差别不是很大,可以根据个人喜好选择,不过其中limma包只能展示最多三个数据集的关系,后面三个包都可以展示超过三个数据集的维恩图。

    1. 安装并加载包VennDiagram

    > install.packages("VennDiagram")
    > library(grid)
    > library(VennDiagram)
    

    2. 画维恩图的函数--venn.diagram()

    VennDiagram包中画维恩图的函数是venn.diagram(). 下面我们来看一下venn.diagram()函数的使用及参数说明。

    > venn.diagram(x, filename, height = 3000, width = 3000, resolution =
        500, imagetype = "tiff", units = "px", compression =
        "lzw", na = "stop", main = NULL, sub = NULL, main.pos
        = c(0.5, 1.05), main.fontface = "plain",
        main.fontfamily = "serif", main.col = "black",
        main.cex = 1, main.just = c(0.5, 1), sub.pos = c(0.5,
        1.05), sub.fontface = "plain", sub.fontfamily =
        "serif", sub.col = "black", sub.cex = 1, sub.just =
        c(0.5, 1), category.names = names(x), force.unique =
        TRUE, print.mode = "raw", sigdigs = 3, direct.area =
        FALSE, area.vector = 0, hyper.test = FALSE, total.population = NULL, 
        lower.tail = TRUE, ...)
    
    

    部分参数说明:

    x: a list of vectors, e.g: list(A=1:10, B=3:8, C=5:13)
    filename: 设置图形输出文件名
    resolution: 输出图形的清晰度,DPI数值
    imagetype: 输出图形的格式,tiff, png, svg 等
    alpha: 设置每个区块的透明度
    main: 图形标题
    main.fontface: 字体样式,比如斜体,粗体等
    main.fontfamily: 字体,比如Time New Roman等
    关于调解文字的,不仅可以针对标题调节,还有参数分别针对子标题,维恩图中每个部分(类别)的名字进行字体,大小,和字体样式的设置。

    更多关于venn.diagram函数的参数说明可以查看其详细文档
    venn.diagram官网: Make a Venn Diagram in VennDiagram: Generate High-Resolution Venn and Euler Plots (rdrr.io)

    <meta charset="utf-8">

    <article class="_2rhmJa">

    sample(x, size, replace=F) # 不放回抽样

    二、venn基础图

    1 两个圈

    venn.diagram(
      x = list(set1, set2),
      category.names = c("Set 1" , "Set 2 "),
      filename = 'venn.png',
      output=TRUE
    )
    
    
    image

    2 三个圈

    venn.diagram(
      x = list(set1, set2, set3),
      category.names = c("Set 1" , "Set 2 " , "Set 3"),
      filename = 'venn.png',
      output=TRUE
    )
    
    
    image

    3 四个圈

    venn.diagram(
      x = list(set1, set2, set3, set4),
      category.names = c("Set 1" , "Set 2 " , "Set 3", "Set 4"),
      filename = 'venn.png',
      output=TRUE
    )
    
    
    image

    4 五个圈

    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',
      output=TRUE
    )
    
    
    image

    三、个性化参数调整

    #调整参数进行图形优化
    
    venn.plot <- draw.pairwise.venn(  area1 = 80,  #区域1的数 
    area2 = 30,   #区域2的数 
    cross.area = 2,  #重叠的个数 
    category = c("First", "Second"),#分类命名
    fill = c("blue", "red"),#1 2 区域分别的填充颜色 
    lty = "blank",  #1 2 区域的边框线类型 
    cex = 2,        #1 2 区域内部数字的字体大小 
    cat.cex = 2,    # 分类名称的字体大小 
    cat.dist = 0.09,   #分类名称距离边的距离 实际调整 
    cat.just = list(c(-1, -1), c(1, 1)),  #分类名称的位置  ,圈内或者圈外
    ext.pos = 30,  #线的角度 默认是正上方12点位置 
    ext.dist = -0.05,   #外部线的距离  跟根据圆圈的大小适当调整
    ext.length = 0.85,  #外部线长度 
    ext.line.lwd = 2,  #外部线的宽度 
    ext.line.lty = "dashed" )  #外部线为虚线);
    grid.draw(venn.plot)
    
    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 旋转确定大打头数据集
    )
    
    
    image

    四、保存

    1 绘图待保存

    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"
    )
    
    

    2 保存为PDF

    pdf("venn-pdf.pdf")
    grid.draw(p)
    dev.off()
    
    
    image

    3 保存为PNG

    png("venn-png.png")
    grid.draw(p)
    dev.off()
    
    
    image

    更多参数:

    col = NA  # 边框设为无色
    
    

    参考:https://www.r-graph-gallery.com/14-venn-diagramm.html
    venn网页工具:http://bioinformatics.psb.ugent.be/webtools/Venn/
    venn.diagram函数文档: https://www.rdocumentation.org/packages/VennDiagram/versions/1.6.20/topics/venn.diagram
    The R Graph Gallery绘图教程:https://www.r-graph-gallery.com/index.html
    如何使用R来绘制韦恩图(Venn Diagram) - 云+社区 - 腾讯云 (tencent.com)

    相关文章

      网友评论

        本文标题:R语言画维恩图--VennDiagram

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