2014-02-11 98 views
2

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

以下是代码的一个基本的例子比我有工作:

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

回答

3

目前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() 

enter image description here

我定义了一个draw.triple.venn2功能,并在代码中插入一个 “2”,并得到了你所看到的上面。

+0

我很抱歉,但我仍然无法得到它的工作。你如何定义draw.triple.venn2函数? – user3209543

+0

我想我需要知道您在查看源代码和编辑纯R中定义的函数代码时的舒适程度。 –

2

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

截至目前,该文氏图包现在支持print.mode参数,它可以改变为“百分比”,显示维恩图中的百分比。例如:

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

+0

如果您可以提供一个简洁的示例,那么您的答案会大大改善。 –

+0

我已经添加了一个例子。 –