我们可以破解draw.triple.venn
.
V <- draw.triple.venn(...) ## catch it in an object
探索对象的结构使用str(v)
揭示它基本上是一个列表,其中一些列表对象中定义了标签。
str(V)
# [...]
# $ :List of 11
# ..$ label : chr "26030" <-- here "label"
# ..$ x : 'unit' num 0.2npc
# .. ..- attr(*, "valid.unit")= int 0
# .. ..- attr(*, "unit")= chr "npc"
# ..$ y : 'unit' num 0.739npc
# .. ..- attr(*, "valid.unit")= int 0
# .. ..- attr(*, "unit")= chr "npc"
# ..$ just : chr "centre"
# [...]
我们可以使用括号函数提取它们`[[`()
,将它们保存在两个不同的临时对象中,并formatC
使用所需的参数big.mark=
。之后,我们将未触及的临时对象替换为数值为非tmp2
的修改过的临时对象。tmp1
NA
tmp1 <- tmp2 <- lapply(V, `[[`, "label")
tmp1[sapply(lapply(V, `[[`, "label"), is.null)] <- NA
tmp1[] <- ifelse(is.na(as.numeric(tmp1)), NA,
formatC(as.numeric(tmp1), format="d", big.mark=","))
tmp2[!is.na(tmp1)] <- tmp1[!is.na(tmp1)]
最后,我们用 grob 中的大标记替换修改过的标签,Map
并告诉 Rclass
是"gList"
。
V <- `class<-`(Map(`[[<-`, V, "label", tmp2), "gList")
现在,我们可以使用grid.draw
.
grid.newpage()
grid.draw(V)