2015-09-07 4 views
7

In einem Papier, das ich über ein schönes 5 Sätze Venn-Diagramm vor kurzem kam:Nizza suchen fünf Sätze Venn-Diagramme

enter image description here

Ich habe mich gefragt, welche Software verwendet wurde, könnte dies zu ziehen? Kann das vielleicht in R geschehen?

Die meisten der Pakete Ich sah scheinen die weniger klar Version

enter image description here

Irgendwelche Gedanken zu produzieren?

EDIT: scheint die Natur Artikel dieses Web-Tool verwendet: http://bioinformatics.psb.ugent.be/webtools/Venn/ vielleicht noch schön zu portieren zu einem gewissen R-Paket, vor allem der asymmetrischen Venns, die derzeit nicht in jedem Paket verfügbar ist, die ich kenne

+1

Haben Sie die Pakete in [Venn Diagrams with R] (http://stackoverflow.com/questions/1428946/venn-diagrams-with-r?rq=1) überprüft? –

+0

Ja, ich habe alles versucht! Aber sie können nur die Feige unten produzieren, nicht die oben! Einige sind auf 4 oder weniger Sets beschränkt ... –

Antwort

10

Für die Aufzeichnung Adrian Dusa ein wirklich schönes neues R-Paket venn gemacht, das Venn wie oben macht Diagramme, für bis zu 7 Sätze:

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

enter image description here

venn(7, ilab=TRUE, zcolor = "style") 

enter image description here

Danke Adrian für das coole Paket!

7

Ich habe auch den Online-Venn-Diagramm-Generator auf der Bioinformatik-Seite der Universität Gent benutzt und wollte meine eigene Funktion haben. Die Idee ist natürlich, jede Kreuzungsregion vernünftig zu bemessen, so dass der Text für die Zählungen alle die gleiche Größe haben kann. Hier ist mein Versuch:

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) 
## } 
} 

Dann

fiveCellVenn() 

Image of Venn Diagram

ein Venn ähnlich wie Ihre erste ergibt. Ich habe noch keinen Vertreter, um ein Bild zu posten. Wahrscheinlich möchten Sie die Farben unterlegen und die Zellnamen verschieben.

+0

Sehr schön! Vielen Dank dafür - sieht großartig aus! Sie könnten auch erwägen, die Polygone etwas zu glätten, um sie noch schöner aussehen zu lassen, wie in http://gis.stackexchange.com/questions/24827/how-to-smooth-the-polygons-in-a-contour-map/24929 # 24929 Könnte schön sein, auch auf andere nrs von Sets zu verallgemeinern. Vielleicht nehmen Sie Kontakt zu einem der Venn-Diagramm-R-Pakete auf - sie könnten daran interessiert sein, dieses mit aufzunehmen! –

+0

mit der Funktion spline.poly() in der Verknüpfung über etwas entlang der Linien der Handlung (newxhull, newyhull); polygon (spline.poly (as.data.frame (liste (x = newxhull, y = newyhull)) [- seq (1, länge (newxhull), by = 2),], 100, k = 3)) könnte sein verwendet, um die Polygone ein wenig zu glätten –