## Arne Schillert 07.07.2008 ## new written Venn diagram ## inspired by library limma's venn.diagram qcVenn <- function(A, B, C, labels, textSize = 1, labelSize = 1.2, numberSnps) { p1 <- length(setdiff(A, union(B, C))) p2 <- length(setdiff(intersect(A, B), C)) p3 <- length(setdiff(B, union(A, C))) p4 <- length(setdiff(intersect(A, C), B)) p5 <- length(intersect(intersect(A, B), C)) p6 <- length(setdiff(intersect(B, C), A)) p7 <- length(setdiff(C, union(A, B))) counts <- c(p1, p2, p3, p4, p5, p6, p7) ## circles: xCen <- c(-1, 1, 0) yCen <- c(1/sqrt(3), 1/sqrt(3), -2/sqrt(3)) r <- 1.5 theta <- 2 * pi * (1:720)/720 par(mai = c(0, 0, 0, 0)) plot(0, type = "n", xlim = c(-3.2, 3.2), ylim = c(-3.2,3.2), axes = FALSE, xlab = "", ylab = "") for(i in seq(along = xCen)) { lines(xCen[i] + r * cos(theta), yCen[i] + r * sin(theta), lwd = 1.2) } xD <- 2 yD <- sqrt(3) xBig <- 0.8 xSmall <- 0.4 yBig <- 0.7 ySmall <- 0.4 xPos <- c(xCen[1] - xSmall, 0, xCen[2] + xSmall, -xBig, 0, xBig, 0) yPos <- c(yCen[1] + ySmall, yCen[1] + ySmall, yCen[1] + ySmall, yCen[3] + yBig, yCen[2] - sqrt(5)/4,yCen[3] + yBig, yCen[3] -ySmall) text(xPos, yPos, counts, cex = textSize) text(c(-1.1, 1.1, 0), c(2.45, 2.45, -3.1), labels, cex = labelSize) nOut <- length(unique(c(A, B, C))) text(-1.7, 3.1 , paste("total:" ,numberSnps), cex = 1.2) text(2.1, 3.1 , paste("total excluded:" ,nOut), cex = 1.2) ## adding number of SNPs which passed each criterion ns <- c(length(A), length(B), length(C)) for(i in 1:3){ text(1.5, (-2.1 - 0.25 * i), sprintf("%s: ", labels[i]), cex = 1.2, adj = 0, font = 7) text(2.95, (-2.1 - 0.25 * i), ns[i], cex = 1.2, adj = 1) } }