R 好看的五组维恩图

R 好看的五组维恩图,r,graphics,venn-diagram,R,Graphics,Venn Diagram,在我最近的一篇论文中,我发现了一个漂亮的5组维恩图: 我想知道用什么软件画这个?这可能在R中完成吗 我看到的大多数软件包似乎都产生了不太清晰的版本 有什么想法吗 编辑:《自然》杂志文章似乎使用了以下web工具: 把它移植到一些R包上,特别是非对称的VENS仍然是很好的,在我知道的 < P>的任何包中都是不可用的,我还在Geunt生物信息学网站上使用了在线VN图生成器,并希望拥有我自己的功能。当然,我们的想法是让每个相交区域的大小合理,以便计数的文本都可以是相同的大小。以下是我的尝试: fiv

在我最近的一篇论文中,我发现了一个漂亮的5组维恩图:

我想知道用什么软件画这个?这可能在R中完成吗

我看到的大多数软件包似乎都产生了不太清晰的版本

有什么想法吗

编辑:《自然》杂志文章似乎使用了以下web工具:
把它移植到一些R包上,特别是非对称的VENS仍然是很好的,在我知道的

< P>的任何包中都是不可用的,我还在Geunt生物信息学网站上使用了在线VN图生成器,并希望拥有我自己的功能。当然,我们的想法是让每个相交区域的大小合理,以便计数的文本都可以是相同的大小。以下是我的尝试:

fiveCellVenn <- function(colorList=col2rgb(rainbow(5)),
                         cellCounts=seq(1,31,1),
                         cellLabels=c("one","two","three","four","five"),
                         saturation=.25){
  rotateVec <-function(vec,amount){
    return(c(vec[(amount+1):length(vec)], vec[1:amount]))
  }
  n=70
  xhull <- c()
  yhull <- c()
  for (i in 1:n){
    xhull <- c(xhull, cos((i*2*pi)/n))
    yhull <- c(yhull, sin((i*2*pi)/n))
  }
## The Venn cells begin as a 70-sided regular polygon
## plot(xhull, yhull)
## polygon(xhull, yhull)
## Multiply each unit vector in the hull by a scalar, arrived at by 
## iterative adjustment.
  adjust <-c(10,10.35,10.6,10.5,10.4,10.3,10.1,9.6,9,8.5,
             8,7.625,7.25,7.125,7,6.875,6.75,6.875,7,7.125,
             7.25,7.625,8.1,9.125,10.25,11.375,12.5,13.15,13.8,14.3,
             14.6,14.725,14.7,14.7,14.7,14.4,14.1,13.8,13.5,12.8,
             12.1,11.15,10.2,9.6,8.95,8.3,7.7,7,6.25,5.6,
             5,4.75,4.5,4.25,4,3.8,3.6,3.45,3.45,3.45,
             3.5,3.625,3.75,3.825,4,4.25,4.5,5.75,7.25,8.5)
  newxhull <- xhull*adjust
  newyhull <- yhull*adjust
## Text location was also done by hand:
  textLocationX <- c(-13,-3,8,9,-4,-7.5,7.5,-9,-8,4,6.5,-2,9,-4,1.4,4,-7.5,-3.5,7.5,-6,-6.5,6,1.5,4,-0.5,4.5,0,-5,-3.5,3.5,0)
  textLocationY <- c(1,12,8,-8,-12,6.5,4.5,1,-4,8.5,-6,8.5,-1.5,-8,-9,5,3.5,6,1.5,-6,-1.5,-2,8,-7,-6.5,2,5.5,2,-3.5,-4,0)
  textLocationMatrix <- matrix(cbind(textLocationX,textLocationY),nrow=31,ncol=2)
  plot(newxhull, newyhull, pch=".", xlim=c(-16,16), ylim=c(-16,16),
       axes=FALSE,xlab="",ylab="")
  newAdjust<-adjust
  for (i in 1:5){
    newxhull <- xhull*newAdjust
    newyhull <- yhull*newAdjust
    polygon(newxhull, newyhull, 
            border=rgb(colorList[1,i]/255, colorList[2,i]/255, colorList[3,i]/255, 1),
            lwd=2,
            col=rgb(colorList[1,i]/255, colorList[2,i]/255, colorList[3,i]/255,saturation))
    newAdjust <- rotateVec(newAdjust,14)
  }
  text(textLocationMatrix[,1], textLocationMatrix[,2],labels=as.character(cellCounts))
  text(textLocationMatrix[c(17,2,3,24,14),1]*c(2,1.25,1.5,2,2),
       textLocationMatrix[c(17,2,3,24,14),2]*c(2,1.35,1.5,2,2),
       labels=cellLabels)
##  uncomment and run to get points and grid for adjusting text location
##  points(textLocationMatrix[,1], textLocationMatrix[,2])
##  for (i in -16:16){
##   if (i%%5==0){
##     color="black"
##   }else{
##     color="lightblue"
##   }
##  abline(v=i,col=color)
##  abline(h=i, col=color)
##  }
}


产生一个与第一个类似的Venn。我还没有代表发布图片。您可能希望淡化颜色并移动单元格名称。

为了记录,Adrian Dusa制作了一个非常不错的新R包
venn
,它可以制作如上所述的venn图,最多7组:

library(venn)
venn(5, ilab=TRUE, zcolor = "style")

谢谢阿德里安的酷包

库(venn);图书馆(tidyverse);图书馆(stringr);
library(venn); library(tidyverse); library(stringr); 

p_th = 0.0;

data <- read_csv("finaldf.csv")
data

venn = 
  list(A = 
     data %>% 
     filter(CVA > p_th) %>% 
     .$phrase,
   B = 
     data %>% 
     filter(IHD > p_th) %>% 
     .$phrase,
   C = 
     data %>% 
     filter(CM > p_th) %>% 
     .$phrase,
   D = 
     data %>% 
     filter(ARR > p_th) %>% 
     .$phrase,
   E = 
     data %>% 
     filter(VD > p_th) %>% 
     .$phrase,
   G = 
     data %>% 
     filter(CHD > p_th) %>% 
     .$phrase);

png("ven.png", width = 800, height = 800)

venn.result =
  venn(venn, ilabels = TRUE, 
       zcolor = "style", size = 25, cexil = 1.2, cexsn = 1.5);


dev.off()
p_th=0.0; 数据% 过滤器(CVA>p_th)%>% .$短语, B= 数据%>% 过滤器(IHD>p_th)%>% .$短语, C= 数据%>% 过滤器(CM>p_th)%>% .$短语, D= 数据%>% 过滤器(ARR>p_th)%>% .$短语, E= 数据%>% 滤光片(VD>p_th)%>% .$短语, G= 数据%>% 过滤器(CHD>p_th)%>% ($短语); png(“ven.png”,宽=800,高=800) 文氏结果= venn(venn,ilabels=TRUE, zcolor=“style”,size=25,cexil=1.2,cexsn=1.5); 发展主任()
6组维恩图


也许您可以尝试使用VennDetail,它不仅可以帮助您生成VenniaGram,还可以为您提供生成“vennpie”图形的选项。您还可以根据图形轻松提取每个子集。

您是否签入了包?是的,我尝试了所有这些!但是他们只能在底部生产无花果,而不能在顶部生产无花果!还有一些限制在4套或更少…非常好!非常感谢这一切-看起来棒极了!你也可以考虑稍微平滑多边形,使它们看起来更漂亮,因为也可以很好地推广到其他NRS的集合。也许可以联系venn diagram R软件包中的一个-他们可能有兴趣包括这一个!使用spline.poly()函数在绘图线上方的链接中(newxhull,newyhull);多边形(spline.poly(as.data.frame(list(x=newxhull,y=newyhull))[-seq(1,length(newxhull),by=2),],100,k=3))可用于稍微平滑多边形这看起来很棒。谢谢分享!您能否通过在答案中添加
dput(数据)
使其更有用、更具可复制性?
venn(7, ilab=TRUE, zcolor = "style")
library(venn); library(tidyverse); library(stringr); 

p_th = 0.0;

data <- read_csv("finaldf.csv")
data

venn = 
  list(A = 
     data %>% 
     filter(CVA > p_th) %>% 
     .$phrase,
   B = 
     data %>% 
     filter(IHD > p_th) %>% 
     .$phrase,
   C = 
     data %>% 
     filter(CM > p_th) %>% 
     .$phrase,
   D = 
     data %>% 
     filter(ARR > p_th) %>% 
     .$phrase,
   E = 
     data %>% 
     filter(VD > p_th) %>% 
     .$phrase,
   G = 
     data %>% 
     filter(CHD > p_th) %>% 
     .$phrase);

png("ven.png", width = 800, height = 800)

venn.result =
  venn(venn, ilabels = TRUE, 
       zcolor = "style", size = 25, cexil = 1.2, cexsn = 1.5);


dev.off()