Diagramas de Venn con R?
venn-diagram (8)
Aquí hay una referencia a otra versión para datos de 3 variables: http://elliotnoma.wordpress.com/2011/02/09/venn-diagram/
El código también está disponible en el paquete colorfulVennPlot: colorfulVennPlot
Hay otros paquetes para hacer diagramas de Venn en R además del paquete limma.
Alguien tiene consejos?
Aquí hay algunas notas sobre cómo hacer diagramas de Venn con los paquetes de limma.
Esto llega muy tarde, pero podría ser útil para otros que buscan una respuesta: VennDiagram , en CRAN here .
Permite múltiples conjuntos (cuatro conjuntos para venn, 3 conjuntos para diagramas de Euler), colores y fuentes personalizables, sintaxis simple y, lo mejor de todo, el tamaño de los círculos es proporcional al tamaño de los conjuntos de datos (al menos al comparar 2 datos) conjuntos). Instalar:
install.packages("VennDiagram")
library(VennDiagram)
Para aquellos que usan paquetes de bioconductores y trabajan con coordenadas genómicas, recientemente vennDiagram se implemented en el paquete ChIPpeakAnno (versión 2.5.12) y permite intersecciones bonitas de coordenadas genómicas de, por ejemplo, picos Chip-seq. Para los primeros usuarios, es posible que deba instalar el paquete de desarrollo .
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"))
Hay un paquete Vennerable en R-forge .
source("http://bioconductor.org/biocLite.R")
biocLite(c("graph", "RBGL", "gtools", "xtable"))
install.packages("Vennerable", repos="http://R-Forge.R-project.org")
La función venn en el paquete gplots también es útil si necesita crear un Diagrama de Venn de 4/5 series.
Yo recomendaría el paquete VennDiagram: http://cran.r-project.org/web/packages/VennDiagram/VennDiagram.pdf
En pake 19 encontrará 10 pakes de muy buenos ejemplos (tanto avanzados como simplificados). Hasta el momento no he encontrado nada que no pueda hacer que lo necesite.
Yo uso dos funciones personalizadas para el truco. Mi implementación de Venndia traza el diagrama de venn y devuelve listas de superposiciones entre A y B (y C). Vea el código a continuación.
Con estos, puedes
vd <- venndia(A=LETTERS[1:15], B=LETTERS[5:20], getdata=TRUE)
que trazará y devolverá los datos. usted puede desactivar la devolución de los datos haciendo
venndia(A=LETTERS[1:15], B=LETTERS[5:20])
ya que getdata es FALSO por defecto. / 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
)
}
}
Duncan Murdoch tiene un paquete venn , que no está en CRAN. ( punta de sombrero para Gabor Grothendieck )
También puede leer sobre esto en el "Journal of Statistical Software" .