如何在三重维恩图中添加逗号分隔符?

我是R语言的初学者,并且我的代码看起来像这样

library(VennDiagram)
grid.newpage()
draw.triple.venn(area1=49644,area2=38697,area3=33281,n12=14221,n23=11026,n13=13635,n123=4242,category=c("DOGS","CATS","HORSES"),cex=1.6,cat.cex=1.8,lwd=2,fill=c("blue","pink1","grey50"))

我想为大数字添加逗号分隔符,但不知道如何添加prettyNum或某些类似函数。有人可以帮我吗?

cloud529 回答:如何在三重维恩图中添加逗号分隔符?

我们可以破解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(*,"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)]

最后,我们使用Map替换在grob中用大标记修改的标签,并告诉R class"gList"

V <- `class<-`(Map(`[[<-`,V,"label",tmp2),"gList")

现在,我们可以使用grid.draw绘制该grob。

grid.newpage()
grid.draw(V)

enter image description here

本文链接:https://www.f2er.com/2472729.html

大家都在问