【问题标题】:Adding percents to Venn Diagrams in R在 R 中向维恩图添加百分比
【发布时间】:2014-03-10 00:22:34
【问题描述】:

我正在尝试为我的维恩图的每个部分添加百分比。我尝试使用粘贴将圆圈标题与百分比连接起来。然而,不幸的是,这并不完全有效,因为它只提供每个独立组的百分比,而不提供每个交叉点的百分比,因为交叉点没有标题。理想情况下,我希望百分比在圆圈内。例如,我希望中间的三重交叉点(工作、学习、娱乐)表示“83, 20.54%”,而不是现在表示的“83”。

以下是我正在使用的代码的基本示例:

g = draw.triple.venn(
  area1 = 396,
  area2 = 273,
  area3 = 147,
  n12 = 266,
  n23 = 86,
  n13 = 143,
  n123 = 83,
  category = c("Study", "Work", "Play"),
  fill = c("blue", "red", "green"),
  euler.d=TRUE,
  scaled=TRUE, ind = FALSE,
)

require(gridExtra)
grid.arrange(gTree(children=g), main="Title", sub="subtitle")

【问题讨论】:

    标签: r percentage set-intersection venn-diagram


    【解决方案1】:

    这是一个使用 venn.diagram() 的示例

    venn.diagram(
    x = list(NTNU$genes, gse$genes, meta$genes),
    category.names = c("Study", "Work", "Play"),
    col = "transparent",
    fill = c("blue", "green", "red"),
    alpha = 0.30,
    print.mode=c("raw","percent"),
    filename = "test_venn_diagramm.png",
    imagetype="png",
    output=TRUE,
    )
    

    【讨论】:

      【解决方案2】:

      到目前为止,VennDiagram 包现在支持 print.mode 参数,可以将其更改为“percent”以在维恩图中显示百分比。例如:

      example.list = list(A=1:10, B=6:15, C=c(10, 16:20))
      venn.grid = venn.diagram(example.list, filename=NULL, print.mode="percent")
      grid.draw(venn.grid)
      

      【讨论】:

      • 如果你能提供一个简洁的例子,你的答案会大大改善。
      • 我添加了一个例子。
      • 我得到带小数的标签。我们可以把它们四舍五入吗?
      【解决方案3】:

      在图表中绘制百分比时,最好使用手动文本附件,因为它既简单又非常灵活,可以随意添加。举例如下:

      library('VennDiagram')
      plot.new() #locator can be used in a plot graph but not a venn graph, so first make a brand new plot graph
      draw.single.venn(area = 22, category = "Dog People")
      text(locator(1),'Outlier',adj=0)
      

      【讨论】:

        【解决方案4】:

        BondedDust 的回答对我非常有帮助。不幸的是,由于缺乏声誉,我无法对他的回答进行投票,也无法在评​​论中添加以下内容,所以我会在这里写下。

        为了扩展 BondedDust 的出色解决方案,我遇到了与用户相同的问题,我发现修改默认 VennDiagram 函数的一种简单方法是简单地将这一行添加到代码中(在加载 VennDiagram 库之后):

        body(draw.triple.venn)[[78]] <- substitute(cell.labels <- paste0(areas," : ", round( 100*areas/sum(areas), 1), "%"))
        

        希望对你有帮助

        参考资料:

        1. https://stackoverflow.com/a/2458377/3881613
        2. https://stackoverflow.com/a/2485556/3881613

        【讨论】:

          【解决方案5】:

          目前VennDiagram::draw.triple.venn 将单元格标签硬编码为数字。没有可用于更改该默认值的开关。在您确定定义标签的位置后,很容易破解它。变化:

          cell.labels <- areas
          

          收件人:

          draw.triple.venn2 <- function( ....
                .....
          cell.labels <- paste0(areas," : ", round( 100*areas/sum(areas), 1), "%")
                 .....
            }
          
          png(); 
           print( grid.arrange(gTree(children=g), main="Title", sub="subtitle")); 
          dev.off()
          

          我定义了一个draw.triple.venn2 函数并在您的代码中插入了一个“2”,得到了您在上面看到的内容。

          【讨论】:

          • 很抱歉,我仍然无法让它工作。如何定义 draw.triple.venn2 函数?
          • 我想我需要知道您在查看源代码和编辑纯 R 中定义的函数代码时的舒适程度。
          猜你喜欢
          • 1970-01-01
          • 2015-09-28
          • 1970-01-01
          • 2021-04-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多