web-dev-qa-db-fra.com

Diagrammes de Venn avec R?

Existe-t-il d'autres paquets pour faire des diagrammes de Venn dans R en plus du paquet limma.

Quelqu'un a des pourboires?

Voici quelques notes sur la réalisation de diagrammes de Venn avec les packages limma.

27
JD Long

Duncan Murdoch a un paquet venn , qui n’est pas sur CRAN. ( pointe de chapeau à Gabor Grothendieck

Vous pouvez également lire à ce sujet dans le "Journal of Statistical Software" .

5
Shane

Liste des packages du diagramme de Venn:

14
bala

Il y a Un paquetage valable sur 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

10
Marek

J'utilise deux fonctions personnalisées à la ruse. Mon implémentation de venndia trace le diagramme de venn et renvoie des listes de chevauchements entre A et B (et C). Voir le code ci-dessous.

Avec ceux-ci, vous pouvez

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

qui va à la fois tracer et renvoyer les données. vous pouvez désactiver le retour des données en faisant

venndia(A=LETTERS[1:15], B=LETTERS[5:20])

puisque getdata est FALSE par défaut. /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
        )
    }
}
7
Daniel

La fonction venn dans le paquet gplots est également utile si vous devez créer un diagramme de Venn de 4/5 ensembles.

7
Paolo

Cela arrive très tard, mais cela pourrait être utile aux autres personnes qui cherchent une réponse: VennDiagram , sur CRAN ici .

Il permet plusieurs ensembles (quatre ensembles pour venn, trois ensembles pour les diagrammes d'Euler), des couleurs et des polices personnalisables, une syntaxe simple et surtout, la taille des cercles est proportionnelle à la taille des ensembles de données (au moins lors de la comparaison de 2 données). ensembles). À installer: 

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

Pour ceux qui utilisent des packages bioconducteurs et travaillent avec des coordonnées génomiques, vennDiagram a récemment été implémenté dans le package ChIPpeakAnno (version 2.5.12) et permet de jolies intersections des coordonnées génomiques, par exemple, des pics Chip-seq. Pour les utilisateurs précoces, vous devrez peut-être installer le package de développement .

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"))
6
fridaymeetssunday

Voici une référence à une autre version pour les données à 3 variables: http://elliotnoma.wordpress.com/2011/02/09/venn-diagram/

Le code est également disponible dans le package colorfulVennPlot: http://cran.r-project.org/web/packages/colorfulVennPlot/index.html

0
pitabread

Je recommanderais le paquet VennDiagram: http://cran.r-project.org/web/packages/VennDiagram/VennDiagram.pdf

Sur pake 19, vous trouverez 10 exemples de très bons exemples (avancés et simplifiés). Pour le moment, je n'ai rien trouvé qui ne puisse pas en faire et j'en ai besoin.

0
Stenemo