覆盖 VennDiagram 包的总和值

Overriding the sum values for the VennDiagram package

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

   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”。

维恩图手册:cran.r.project.org

提前致谢!

编辑:

输出应该是这样的... nrows 将总数加在一起[=13​​=]

(当前输出将只获取计数)

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

我认为您想使用 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"))

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

您可能有 table:

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)