维恩图与项目标签

A_S*_*n73 17 r venn-diagram

假设我有两个向量

foo <- c('a','b','c','d')
baa <- c('a','e','f','g')
Run Code Online (Sandbox Code Playgroud)

有没有人知道产生维恩图的方法,但在图中可视化的矢量项.

像这样?(用powerpoint制作) 在此输入图像描述

use*_*650 15

使用包中的venn.diagram功能的快速解决方案VennDiagram.标签(计数)在函数中是硬编码的,因此不能使用函数参数进行更改.但是对于这样一个简单的例子,你可以改变grobs自己.

library(VennDiagram)

# your data
foo <- c('a','b','c','d')
baa <- c('a','e','f','g')

# Generate plot
v <- venn.diagram(list(foo=foo, baa=baa),
                  fill = c("orange", "blue"),
                  alpha = c(0.5, 0.5), cat.cex = 1.5, cex=1.5,
                  filename=NULL)

# have a look at the default plot
grid.newpage()
grid.draw(v)

# have a look at the names in the plot object v
lapply(v,  names)
# We are interested in the labels
lapply(v, function(i) i$label)

# Over-write labels (5 to 7 chosen by manual check of labels)
# in foo only
v[[5]]$label  <- paste(setdiff(foo, baa), collapse="\n")  
# in baa only
v[[6]]$label <- paste(setdiff(baa, foo)  , collapse="\n")  
# intesection
v[[7]]$label <- paste(intersect(foo, baa), collapse="\n")  

# plot  
grid.newpage()
grid.draw(v)
Run Code Online (Sandbox Code Playgroud)

哪个产生

在此输入图像描述

显然,这种方法很快就会失控,因为更多的类别和交叉点.

  • 对于三路维恩来说,这对我有用。它是来自 Stack 的几个人代码的混合体,很抱歉没有参考资料。问题是,Venn 的标签 **start** 位于列表中的位置 7,有 3 个圆圈,因此是“i+6”。`grid.draw(ven.plot) 重叠 &lt;- 计算.overlap(named.list.for.venn) 重叠 &lt;- 重叠[ sort(names(overlaps)) ] for (i in 1:length(overlaps)){ lab &lt;-paste0("a", i) ven.plot[[i+6]]$label &lt;-paste(overlaps[[i]],collapse = "\n") } grid.newpage() grid.draw( ven.plot)` (2认同)
  • 斯科特。请随意编辑答案以将您的方法应用于示例或使用新示例扩展它。或者,当然,您可以添加一个新答案:将其隐藏在评论中。 (2认同)

Mar*_*dri 9

使用RAM包:

library(RAM)
foo <- c('a','b','c','d')
baa <- c('a','e','f','g')
group.venn(list(foo=foo, baa=baa), label=TRUE, 
    fill = c("orange", "blue"),
    cat.pos = c(0, 0),
    lab.cex=1.1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 它仅支持 2 组具有实际项目标签 (2认同)

小智 5

我发现更简单的另一种方法是将ggvenn包与show_elements = TRUE.

library(ggvenn)
library(RColorBrewer)
AA <- c("hi","foo", "bar","yep","woo","hoo")
BB <- c("baa","yep", "woo","yes")
CC <- c("yes","foo","hi","woo", "huh")

x <- list(AA=AA , BB=BB , CC=CC)

ggvenn(x, show_elements = T, label_sep = "\n", fill_color = brewer.pal(name="Set2",n=3))
Run Code Online (Sandbox Code Playgroud)

结果图像