zoukankan      html  css  js  c++  java
  • R语言画韦恩图(Venn 文氏图、温氏图、范氏图)

    From https://blog.csdn.net/u011808596/article/details/80974250

    # 先安装各个包

    futile.logger - R中类似log4j的日志记录包. 官网:

    log4r - R中的log4j接口. 官网:

    logging - 一个在R中实现log4j的日志处理包. 官网:

     
     # install.packages("VennDiagram")
     library(grid)
     library(futile.logger)
     library(VennDiagram)

    ==============================================
    已知各个数据集的个数,并且交叉个数来制作韦恩图
    两个数据集:
     

    venn.plot <- draw.pairwise.venn(
      area1 = 100,  #区域1的数
      area2 = 70,   #区域2的数
      cross.area = 68,  #交叉数
      category = c("First", "Second"),#分类名称
      fill = c("blue", "red"),#区域填充颜色
      lty = "blank",  #区域边框线类型
      cex = 2,        #区域内部数字的字体大小
      cat.cex = 2,    #分类名称字体大小
      cat.pos = c(285, 105), #分类名称在圆的位置,默认正上方,通过角度进行调整
      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);

    三个数据集
    # A more complicated diagram
    venn.plot <- draw.triple.venn(
    area1 = 65,
    area2 = 75,
    area3 = 85,
    n12 = 35,
    n23 = 15,
    n13 = 25,
    n123 = 5,
    category = c("First", "Second", "Third"),
    fill = c("blue", "red", "green"),
    lty = "blank",
    cex = 2,
    cat.cex = 2,
    cat.col = c("blue", "red", "green")
    );
    grid.draw(venn.plot);#画图展示
    # Writing to file
    tiff(filename = "Triple_Venn_diagram.tiff", compression = "lzw");  #保存图片
    dev.off();

    四个数据集:
    # Reference four-set diagram
    venn.plot <- draw.quad.venn(
    area1 = 72,
    area2 = 86,
    area3 = 50,
    area4 = 52,
    n12 = 44,
    n13 = 27,
    n14 = 32,
    n23 = 38,
    n24 = 32,
    n34 = 20,
    n123 = 18,
    n124 = 17,
    n134 = 11,
    n234 = 13,
    n1234 = 6,
    category = c("First", "Second", "Third", "Fourth"),
    fill = c("orange", "red", "green", "blue"),
    lty = "dashed",
    cex = 2,
    cat.cex = 2,
    cat.col = c("orange", "red", "green", "blue")
    );
    grid.draw(venn.plot);#画图展示


    # Writing to file
    tiff(filename = "Quad_Venn_diagram.tiff", compression = "lzw");#保存图片
    dev.off();退出画图

    五个数据集:
    # Reference five-set diagram
    venn.plot1 <- draw.quintuple.venn(
    area1 = 301,
    area2 = 321,
    area3 = 311,
    area4 = 321,
    area5 = 301,
    n12 = 188,
    n13 = 191,
    n14 = 184,
    n15 = 177,
    n23 = 194,
    n24 = 197,
    n25 = 190,
    n34 = 190,
    n35 = 173,
    n45 = 186,
    n123 = 112,
    n124 = 108,
    n125 = 108,
    n134 = 111,
    n135 = 104,
    n145 = 104,
    n234 = 111,
    n235 = 107,
    n245 = 110,
    n345 = 100,
    n1234 = 61,
    n1235 = 60,
    n1245 = 59,
    n1345 = 58,
    n2345 = 57,
    n12345 = 31,
    category = c("A", "B", "C", "D", "E"),
    fill = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
    cat.col = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
    cat.cex = 2,
    margin = 0.05,
    cex = c(1.5, 1.5, 1.5, 1.5, 1.5, 1, 0.8, 1, 0.8, 1, 0.8, 1, 0.8, 1, 0.8,
    1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 1, 1, 1, 1, 1.5),
    ind = TRUE
    );
    grid.draw(venn.plot);#画图展示

    ==============================================
    通过数据列表进行制作图:
    两个数据集:
    # a more elaborate two-set Venn diagram with title and subtitle
    venn.plot <- venn.diagram(
      x = list(
        "A" = 1:100,
        "B" = 96:140
      ),
      filename = "c:\Venn_22set_complex.tiff",
      col = "transparent",
      fill = c("red", "green"),
      cex = 2.5,
      cat.cex = 2.5,
      rotation.degree = 0,
      main = "Complex Venn Diagram",
      main.cex = 2,
      sub.cex = 1,
      alpha = 0.50
    );
    三个数据集:
    A <- sample(1:1000, 400, replace = FALSE);
    B <- sample(1:1000, 600, replace = FALSE);
    C <- sample(1:1000, 350, replace = FALSE);
    venn.plot <- venn.diagram(
      #数据列表
      x = list(
        A = A,
        B = B,
        C = C
      ),
      filename ="C:\1.tiff",    #保存路径
      height = 450, 
      width = 450,
      resolution =300, 
      #imagetype="png", 
      col = "transparent",      #指定图形的圆周边缘颜色  transparent 透明           
      fill = c("cornflowerblue", "green",  "darkorchid1"),  #填充颜色
      alpha = 0.50,                                      #透明度
      label.col = c("orange", "white", "darkorchid4", "white",
                    "white", "darkgreen", "white"),
      cex = 0.45,    #每个区域label名称的大小
      fontfamily = "serif",  #字体
      fontface = "bold",     #字体格式
      cat.col = c("darkblue", "darkgreen", "darkorchid4"),  #分类颜色 
      cat.cex = 0.45,      #每个分类名称大小
      cat.pos = c(100, 260, 0),        #
      cat.dist = c(0.07, 0.07, 0.05),    #
      cat.fontfamily = "serif",     #分类字体
      rotation.degree =180,        #旋转角度
      margin = 0.2               #在网格单元中给出图周围空白量的编号
    );
    可以不保存查看图片,但是效果不佳(命令如下,但是需要首先把filename设置为(filename=NULL))
    grid.draw(venn.plot);
    dev.off();

    四个数据集:
    #sample为抽样函数,首先指定抽样范围,然后制定抽样个数,最后指定是否允许同样的抽样值
    A <- sample(1:1000, 400, replace = FALSE);
    B <- sample(1:1000, 600, replace = FALSE);
    C <- sample(1:1000, 350, replace = FALSE);
    D <- sample(1:1000, 550, replace = FALSE);
    E <- sample(1:1000, 375, replace = FALSE);
    venn.plot <- venn.diagram(
    #数据列表
    x = list(
    A = A,
    D = D,
    B = B,
    C = C
    ),
    filename = "Venn_4set_pretty.tiff",    #保存路径
    col = "transparent",      #指定图形的圆周边缘颜色  transparent 透明           
    fill = c("cornflowerblue", "green", "yellow", "darkorchid1"),  #填充颜色
    alpha = 0.50,                                      #透明度
    label.col = c("orange", "white", "darkorchid4", "white",
    "white", "white", "white", "white", "darkblue", "white",
    "white", "white", "white", "darkgreen", "white"),
    cex = 1.5,    #每个区域label名称的大小
    fontfamily = "serif",  #字体
    fontface = "bold",     #字体格式
    cat.col = c("darkblue", "darkgreen", "orange", "darkorchid4"),  #分类颜色 
    cat.cex = 1.5,      #每个分类名称大小
    cat.pos = 0,        #
    cat.dist = 0.07,    #
    cat.fontfamily = "serif",     #分类字体
    rotation.degree = 270,        #旋转角度
    margin = 0.2               #在网格单元中给出图周围空白量的编号
    );

    五个数据集:
    A <- sample(1:1000, 400, replace = FALSE);
    B <- sample(1:1000, 600, replace = FALSE);
    C <- sample(1:1000, 350, replace = FALSE);
    D <- sample(1:1000, 550, replace = FALSE);
    E <- sample(1:1000, 375, replace = FALSE);
    venn.plot <- venn.diagram(
      x = list(
        A = A,
        B = B,
        C = C,
        D = D,
        E = E
      ),
      filename = "c:\Venn_5set_pretty.tiff",
      col = "black",
      fill = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
      alpha = 0.50,
      cex = c(1.5, 1.5, 1.5, 1.5, 1.5, 1, 0.8, 1, 0.8, 1, 0.8, 1, 0.8,
              1, 0.8, 1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 1, 1, 1, 1, 1.5),
      cat.col = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
      cat.cex = 1.5,
      cat.fontface = "bold",
      margin = 0.05
    );

     

    ==============================================

     画文氏图:

    https://www.cnblogs.com/emanlee/p/3931831.html

  • 相关阅读:
    NetCore指令集和
    在WPF中的Canvas上实现控件的拖动、缩放
    WPF 窗体中的 Canvas 限定范围拖动 鼠标滚轴改变大小
    利用百度API(js),怎样通过地址获取经纬度
    讨论一下hibernate如何动态注册一个动态生成的实体类
    大端序vs小端序
    influxdb+telegraf+grafana实现nginx监控
    python库pillow:实现生成图片并加水印
    mac使用之设置vim colors
    学习python库:elasticsearch-dsl
  • 原文地址:https://www.cnblogs.com/emanlee/p/13967370.html
Copyright © 2011-2022 走看看