带有 shares/relative 个数字的维恩图

VennDiagram with shares/relative numbers

使用RVennDiagram 1.6.9,我想画一个三重维恩图并显示份额而不是绝对值。然而,内部一致性检查无法处理舍入错误:

draw.triple.venn(area1=0.89, area2=round(0.481, 2), area3=0.5,
                 n12=0.46, n23=0.4, n13=0.47)

四舍五入的误差极小:

> round(0.48, 2)-0.46-0.4+0.38
[1] -5.551115e-17

使用完整的数字,即 round(0.48, 3) 一切正常,但我不想这样(我的真实数据有更多的数字)。有没有办法超越内部一致性检查?或者有没有更好的方式来显示分享?

首先,注意draw.triple.venn函数有参数print.modesigdigs,这可能对你有帮助。如果这些还不够,您可以尝试通过简单地将所有标签的值替换为您喜欢的改进值来破解输出。这是一个例子:

grid.newpage()
draw.triple.venn(area1=0.89, area2=0.481, area3=0.5,
                 n12=0.46, n23=0.4, n13=0.47, n123=0.38)

grobjs = grid.ls()    # List of all objects on the diagram
for (o in grobjs$name) {
    # Pick out all text labels
    if (grepl(".text.", o) == 1) {
      # Re-format their value
      old_value = as.numeric(grid.get(o)$label)
      new_value = sprintf("%0.2f", old_value)   # 
      if (new_value != "NA") {
        grid.edit(o, label=new_value, redraw=FALSE) 
      }
    }
}
grid.refresh()