2015-01-26 37 views
1

我有一個數據集種,看起來像這樣:重寫和值的文氏圖包

ID X Y Z 
1 T1 10 0 10 
2 T2 0 0 20 
3 T3 10 10 40 
4 T4 0 30 10 
5 T5 0 10 0 
... 

我可以reshape2數據熔化,並把它在文氏圖包以可視化的交叉點數據集。但。我只能看到計數(不是總數)。

VennDiagram只會將T1識別爲「1」XZ交叉口。我想要包裹數「20」。對於T3,它不應該只是XYZ的「1」計數,我希望它總計爲「60」。

文氏圖手冊:cran.r.project.org

提前感謝!

編輯:

輸出應該是這個樣子...... 凡NROWS將總結總計一起

(該電流輸出將只是搶計數)

grid.newpage() 
draw.triple.venn(area1 = nrow(subset(accounts, X > 1)), 
      area2 = nrow(subset(accounts, Y > 1)), 
      area3 = nrow(subset(accounts, Z > 1)), 
      n12 = nrow(subset(accounts, X > 1 & Y > 1)), 
      n23 = nrow(subset(accounts, Y > 1 & Z > 1)), 
      n13 = nrow(subset(accounts, X > 1 & Z > 1)), 
      n123 = nrow(subset(accounts, X > 1 & Y > 1 & Z > 1)), 
      category = c("X", "Y", "Z"), 
      lty = "blank", 
      fill = c("pink1","mediumorchid","skyblue")) 
+0

我對你的預期輸出有點困惑。 ID列表示什麼?對於'VennDiagram'包中的'draw.triple.venn',你期望A的總面積是20,B是50,C是80?你如何計算交叉點? – jraab 2015-01-26 22:19:20

+0

@JesseRaab請參閱編輯! – emehex 2015-01-26 22:23:30

回答

0

library(VennDiagram)包不表現爲,你可能會期望它的行爲:有什麼你以後這應該是更接近。

你可能有一個表:

A1 A2 Overlap 
1 1 2 

而且你希望兩個維恩圖,以反映左邊的圓圈11在正圓形和2在重疊。

運行此代碼:

grid.newpage() 
draw.pairwise.venn(area1 = 1, 
        area2 = 1, 
        cross.area = 2) 

將產生:

Error in draw.pairwise.venn(area1 = 1, area2 = 1, cross.area = 2) : Impossible: cross section area too large.

因此,我們必須通過增加重疊每個區域欺騙維恩圖庫。這樣我們會得到所需的:1; 2; 1。

grid.newpage() 
draw.pairwise.venn(area1 = 1 + 2, 
        area2 = 1 + 2, 
        cross.area = 2) 
0

我想你想使用sum而不是nrow。此外,您還需要在子集上觀察邏輯並可能爲n12,n23n23添加條件。

例如,對於n23您將需要:Y > 1 & Z > 1 & X < 1 - 請注意添加X < 1

draw.triple.venn(area1 = sum(subset(accounts, X > 1)), 
       area2 = sum(subset(accounts, Y > 1)), 
       area3 = sum(subset(accounts, Z > 1)), 
       n12 = sum(subset(accounts, X > 1 & Y > 1 & Z < 1)), 
       n23 = sum(subset(accounts, Y > 1 & Z > 1 & X < 1)), 
       n13 = sum(subset(accounts, X > 1 & Z > 1 & Y < 1)), 
       n123 = sum(subset(accounts, X > 1 & Y > 1 & Z > 1)), 
       category = c("X", "Y", "Z"), 
       lty = "blank", 
       fill = c("pink1","mediumorchid","skyblue")) 
+0

當我嘗試運行您的代碼時,我得到: FUN(FUN [X] [1L]],...)中的錯誤:僅在具有所有數字變量的數據幀上定義 – emehex 2015-01-27 14:28:04

+0

嘗試從「Z <1」 'n12 ='line ...發生這種情況是因爲您可能正在返回一個沒有對象的數據框 - 也就是說,條件導致數據框中的行數爲零,這會導致問題。有可能有更好的方法來處理這個錯誤。 – JasonAizkalns 2015-01-27 16:42:24