R语言画韦恩图(Venn 文氏图、温氏图、范氏图)
  TnD0WQEygW8e 2023年11月05日 64 0

# 先安装各个包

futile.logger - R中类似log4j的日志记录包. 官网:https://github.com/zatonovo/futile.logger

log4r - R中的log4j接口. 官网:https://github.com/johnmyleswhite/log4r

logging - 一个在R中实现log4j的日志处理包. 官网:https://cran.r-project.org/web/packages/logging/index.html

# 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

);


 



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
TnD0WQEygW8e