2014-02-11 203 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

我已經添加了一個例子。 –