【问题标题】:Venn Diagrams with R? [closed]带有 R 的维恩图? [关闭]
【发布时间】:2010-11-28 13:47:12
【问题描述】:

除了limma 包之外,还有其他用于在 R 中绘制维恩图的包吗?

有人有提示吗?

这里有一些 notes on doing Venn diagramslimma 包。

【问题讨论】:

标签: r venn-diagram


【解决方案1】:

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如果您需要创建 4/5 集的维恩图,gplots 包中的 venn 函数也很有用。

      【讨论】:

        【解决方案4】:

        我使用两个自定义函数来解决问题。我的 venndia 实现绘制了 venn 图并返回 A 和 B(和 C)之间的重叠列表。请参阅下面的代码。

        有了这些,你就可以

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

        这将绘制和返回数据。您可以通过以下方式关闭返回数据

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

        因为 getdata 默认为 FALSE。 /丹尼尔

        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
                )
            }
        }
        

        【讨论】:

          【解决方案5】:

          这来得很晚,但它可能对其他寻找答案的人有用: VennDiagram,在 CRAN 上 here

          它允许多组(维恩图 4 组,欧拉图 3 组),可定制的颜色和字体,简单的语法,并且最好的圆形的大小与数据集的大小成正比(至少在比较 2 个数据集)。安装:

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

          对于那些使用 bioconductor 包并使用基因组坐标的人,最近 vennDiagram 在包ChIPpeakAnno(版本 2.5.12)中是implemented,并允许基因组坐标的漂亮交叉,例如,Chip-seq 峰。对于早期采用者,您可能需要安装 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"))
          

          【讨论】:

          • vennDiagram 最多允许 5 套
          • 我去论文了,是up to four sets and Euler diagrams with up to three sets.
          • 从 1.6.16 版本开始,VennDiagram 有一个函数draw.quintuple.venn(),它可以绘制五组的维恩图。
          【解决方案6】:

          【讨论】:

          • 包链接失效
          【解决方案7】:

          这里是对 3 变量数据的另一个版本的参考: http://elliotnoma.wordpress.com/2011/02/09/venn-diagram/

          代码也可以在 colourfulVennPlot 包中找到: http://cran.r-project.org/web/packages/colorfulVennPlot/index.html

          【讨论】:

          • 请注意,您应该在此处或此站点上发布有用的答案点,否则您的帖子可能会被删除为"Not an Answer"。如果您愿意,您仍然可以包含该链接,但仅作为“参考”。答案应该是独立的,不需要链接。
          【解决方案8】:

          我会推荐 VennDiagram 包: http://cran.r-project.org/web/packages/VennDiagram/VennDiagram.pdf

          在 pake 19 中,您会发现 10 个非常好的示例(包括高级示例和简化示例)。到目前为止,我还没有发现任何我需要它做的不能做的事情。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-03
            • 1970-01-01
            • 2012-11-04
            • 1970-01-01
            • 2014-09-21
            相关资源
            最近更新 更多