2009-09-15 4 views
24

Sind neben dem limma-Paket noch weitere Pakete zum Ausführen von Venn-Diagrammen in R verfügbar?Venn-Diagramme mit R?

Hat jemand Tipps?

Hier sind einige notes on doing Venn diagrams mit den Limma-Paketen.

+3

Hallo, ich suche immer noch nach einem Paket, das proportionale Venn-Diagramme zeichnen wird. Hier ist das nächste, was ich vor 8 Jahren gefunden habe, https://stat.ethz.ch/pipermail/r-help/2003-February/029393.html. Ich hatte gehofft, dass es eine jüngere Entwicklung geben würde. – andrewj

+1

http://www.caleydo.org/tools/upset/ – wikiselev

Antwort

5

Die venn-Funktion im Paket gplots ist auch nützlich, wenn Sie ein Venn-Diagramm mit 4/5 Sätzen erstellen müssen.

7

Ich benutze zwei benutzerdefinierte Funktionen, um den Trick. Meine Implementierung von Venendia stellt das Venn-Diagramm dar und gibt Listen von Überlappungen zwischen A und B (und C) zurück. Siehe den folgenden Code.

Mit diesen können Sie

vd <- venndia(A=LETTERS[1:15], B=LETTERS[5:20], getdata=TRUE) 

die beiden Plot werden und die Daten zurück. Sie können die Daten zurück, indem Sie

seit getdata ist standardmäßig FALSE. /Daniel

circle <- function(x, y, r, ...) { 
    ang <- seq(0, 2*pi, length = 100) 
    xx <- x + r * cos(ang) 
    yy <- y + r * sin(ang) 
    polygon(xx, yy, ...) 
} 

venndia <- function(A, B, C, getdata=FALSE, ...){ 
    cMissing <- missing(C) 
    if(cMissing){ C <- c() } 

    unionAB <- union(A, B) 
    unionAC <- union(A, C) 
    unionBC <- union(B, C) 
    uniqueA <- setdiff(A, unionBC) 
    uniqueB <- setdiff(B, unionAC) 
    uniqueC <- setdiff(C, unionAB) 
    intersAB <- setdiff(intersect(A, B), C) 
    intersAC <- setdiff(intersect(A, C), B) 
    intersBC <- setdiff(intersect(B, C), A) 
    intersABC <- intersect(intersect(A, B), intersect(B, C)) 

    nA <- length(uniqueA) 
    nB <- length(uniqueB) 
    nC <- length(uniqueC) 

    nAB <- length(intersAB) 
    nAC <- length(intersAC) 
    nBC <- length(intersBC) 

    nABC <- length(intersABC) 

    par(mar=c(2, 2, 0, 0)) 
    plot(-10, -10, ylim=c(0, 9), xlim=c(0, 9), axes=FALSE, ...) 
    circle(x=3, y=6, r=3, col=rgb(1,0,0,.5), border=NA) 
    circle(x=6, y=6, r=3, col=rgb(0,.5,.1,.5), border=NA) 
    circle(x=4.5, y=3, r=3, col=rgb(0,0,1,.5), border=NA) 

    text(x=c(1.2, 7.7, 4.5), y=c(7.8, 7.8, 0.8), c("A", "B", "C"), cex=3, col="gray90") 

    text(
     x=c(2, 7, 4.5, 4.5, 3, 6, 4.5), 
     y=c(7, 7, 2 , 7 , 4, 4, 5), 
     c(nA, nB, nC, nAB, nAC, nBC, nABC), 
     cex=2 
    ) 

    if(getdata){ 
     list(A=uniqueA, B=uniqueB, C=uniqueC, 
      AB=intersAB , AC=intersAC , BC=intersBC , 
      ABC=intersABC 
     ) 
    } 
} 
9

Es gibt Vennerable package on R-forge.

source("http://bioconductor.org/biocLite.R") 
biocLite(c("graph", "RBGL", "gtools", "xtable")) 
install.packages("Vennerable", repos="http://R-Forge.R-project.org") 

Venn diagram

6

Dieses sehr spät kommt, aber es könnte für andere nützlich Suche nach einer Antwort: VennDiagram, auf here CRAN.

Es erlaubt mehrere Sätze (vier Sätze für Venn, 3 Sätze für Euler Diagramme), anpassbare Farben und Schriftarten, einfache Syntax und und vor allem die Größe der Kreise ist proportional zur Größe der Datensätze (mindestens beim Vergleich von 2 Datensätzen). So installieren Sie:

install.packages("VennDiagram") 
library(VennDiagram) 

Für diejenigen Bioconductor Pakete mit und arbeiten mit genomischer Koordinaten, die vor kurzem war Mengendiagramm implemented im Paket ChIPpeakAnno (Version 2.5.12) und ermöglicht es ziemlich Kreuzungen von Genomic Koordinaten zum Beispiel Chip-Seq Spitzen. Für Erstanwender müssen Sie möglicherweise die development package installieren.

peaks1 = RangedData(IRanges(start = c(967654, 2010897, 2496704), 
    end = c(967754, 2010997, 2496804), names = c("Site1", "Site2", "Site3")), 
    space = c("1", "2", "3"), strand=as.integer(1),feature=c("a","b","f")) 

peaks2 = RangedData(IRanges(start = c(967659, 2010898,2496700,3075866,3123260), 
    end = c(967869, 2011108, 2496920, 3076166, 3123470), 
    names = c("t1", "t2", "t3", "t4", "t5")), 
    space = c("1", "2", "3", "1", "2"), strand = c(1, 1, -1,-1,1), feature=c("a","b","c","d","a")) 

makeVennDiagram(RangedDataList(peaks1,peaks2, peaks1, peaks2), NameOfPeaks=c("TF1", "TF2","TF3", "TF4"), 
    totalTest=100,useFeature=TRUE, main="Venn Diagram", 
    col = "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"), cat.col = c("darkblue", "darkgreen", "orange", "darkorchid4")) 
+0

VennDiagram ermöglicht maximal 5 Sätze – OganM

+0

Ich ging auf das Papier, und es ist 'bis zu vier Sätze und Euler-Diagramme mit bis zu drei Sätze.' – fridaymeetssunday

+1

Ab Version 1.6.16 hat 'VennDiagram' eine Funktion' draw.quintuple.venn() ', die ein Venn-Diagramm für fünf Sätze zeichnet. –

0

Hier Verweis auf eine andere Version für 3-variable Daten: http://elliotnoma.wordpress.com/2011/02/09/venn-diagram/

Der Code im Paket colorfulVennPlot auch verfügbar: http://cran.r-project.org/web/packages/colorfulVennPlot/index.html

+2

Bitte beachten Sie, dass Sie die nützlichen Punkte einer Antwort hier auf dieser Website veröffentlichen sollten, oder dass Ihr Beitrag als ["Keine Antwort"] gelöscht werden kann (http://meta.stackexchange.com/q/8259). Sie können den Link immer noch einfügen, wenn Sie möchten, aber nur als "Referenz". Die Antwort sollte eigenständig stehen, ohne die Verbindung zu benötigen. –