2

我有一个看起来像这样的数据集:

   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 包中以可视化数据集的交叉点。但。我只能可视化计数(而不是总和)。

VennDiagram 只会将 T1 识别为“1”XZ 交叉点。我希望包裹数“20”。对于 T3,它不应该只是 XYZ 的“1”计数,我希望它总和为“60”。

VennDiagram 手册: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"))
4

2 回答 2

2

library(VennDiagram)包的行为与您预期的不同。

你可能有一张桌子:

A1 A2 Overlap 
1  1  2

并且您希望两个维恩图反映1在左圆、1右圆和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)
于 2015-03-20T14:50:18.713 回答
0

我认为您想使用sum而不是nrow. 此外,您将希望查看子集上的逻辑,并可能将条件添加到n12n23n23.

例如,因为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"))
于 2015-01-26T22:39:08.723 回答