2009-09-15 35 views
24

Các gói khác để làm biểu đồ Venn trong R ngoài gói limma.Sơ đồ Venn có R?

Bất kỳ ai cũng có mẹo?

Dưới đây là một số notes on doing Venn diagrams với gói limma.

+3

Xin chào, tôi vẫn đang tìm gói sẽ vẽ biểu đồ Venn tỷ lệ. Đây là điều gần nhất mà tôi đã tìm thấy từ 8 năm trước, https://stat.ethz.ch/pipermail/r-help/2003-February/029393.html. Tôi đã hy vọng rằng sẽ có một sự phát triển gần đây hơn với điều này. – andrewj

+1

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

Trả lời

5

Chức năng venn trong gói gplots cũng hữu ích nếu bạn cần tạo sơ đồ Venn của 4/5 bộ.

7

Tôi sử dụng hai hàm tùy chỉnh để lừa. Việc triển khai venndia của tôi vẽ biểu đồ venn và trả về danh sách các chồng chéo giữa A và B (và C). Xem mã bên dưới.

Với những, bạn có thể

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

mà sẽ cả cốt truyện và trả lại dữ liệu. bạn có thể tắt trả lại dữ liệu bằng cách thực hiện

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

vì getdata là FALSE theo mặc định. /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

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

này đi kèm rất muộn nhưng nó có thể hữu ích cho những người khác tìm kiếm một câu trả lời: VennDiagram, trên cran here.

Nó cho phép nhiều bộ (bốn bộ cho venn, 3 bộ cho sơ đồ Euler), màu sắc và phông chữ có thể tùy chỉnh, cú pháp đơn giản và tốt nhất trong tất cả các kích thước của tỷ lệ với kích thước của tập dữ liệu (ít nhất khi so sánh 2 tập dữ liệu). Để cài đặt:

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

Đối với những người sử dụng các gói bioconductor và làm việc với tọa độ gen, thời gian gần đây là Sơ đồ Venn implemented trong gói ChIPpeakAnno (phiên bản 2.5.12) và cho phép các nút giao thông khá tọa độ gen của, ví dụ, Chip-seq đỉnh. Đối với những người dùng đầu tiên, bạn có thể cần cài đặt development package.

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 cho phép tối đa 5 bộ – OganM

+0

Tôi đã đi đến bài báo, và đó là 'tối đa bốn bộ và sơ đồ Euler với tối đa ba bộ.' – fridaymeetssunday

+1

Kể từ phiên bản 1.6.16, 'VennDiagram' có một hàm' draw.quintuple.venn() ', vẽ một biểu đồ Venn cho năm bộ. –

0

Đây là tài liệu tham khảo cho phiên bản khác cho dữ liệu 3 biến: http://elliotnoma.wordpress.com/2011/02/09/venn-diagram/

Mã này cũng có sẵn trong gói colorfulVennPlot: http://cran.r-project.org/web/packages/colorfulVennPlot/index.html

+2

Xin lưu ý rằng bạn nên đăng các điểm hữu ích của câu trả lời ở đây, trên trang web này, hoặc các rủi ro của bài đăng của bạn sẽ bị xóa là ["Không trả lời"] (http://meta.stackexchange.com/q/8259). Bạn vẫn có thể bao gồm liên kết nếu bạn muốn, nhưng chỉ là 'tham chiếu'. Câu trả lời nên tự đứng lên mà không cần liên kết. –

0

Tôi muốn giới thiệu Sơ đồ Venn gói: http://cran.r-project.org/web/packages/VennDiagram/VennDiagram.pdf

Trên pake 19, bạn sẽ tìm thấy 10 ví dụ rất tốt (cả các mẫu nâng cao và đơn giản). Tính đến thời điểm này tôi đã không tìm thấy bất cứ điều gì mà nó không thể làm điều đó tôi cần nó để làm.

Các vấn đề liên quan