在R中为Venn图添加百分比

5
我正在尝试为我的Venn图中的每个部分添加百分比。我尝试使用paste函数将圆形标题与百分比连接起来。但不幸的是,这只提供了独立组的百分比,而没有为每个交叉区域提供百分比,因为交叉区域没有标题。理想情况下,我希望百分比显示在圆形内部。例如,我希望中间的三重交叉区域(工作、学习、玩乐)表示为“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")
5个回答

6
这里是使用 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,
)

result


感谢您回答这个老问题。这应该是最佳答案! - cdtip

5

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

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)

enter image description here


如果您能提供一个简洁的示例,那么您的答案将会大大改善。 - John Hascall
我已经添加了一个例子。 - Eric Fournier
我得到了带有小数的标签。我们能把它们四舍五入吗? - Kenneth Singh

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函数? - user3209543
我猜我需要了解您在查看纯R定义的函数的源代码并进行编辑方面的舒适程度。 - IRTFM

2

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

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

希望能对您有所帮助。
参考文献:
  1. https://dev59.com/jHE95IYBdhLWcg3wGqAH#2458377
  2. https://dev59.com/jHE95IYBdhLWcg3wGqAH#2485556

1
当在图表中绘制百分比时,最好使用手动文本附加,因为它既简单又非常灵活,可以添加任何你想要的内容。以下是一个示例:
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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接