簡體   English   中英

如何在三重維恩圖中添加逗號分隔符?

[英]How to add comma separator in triple venn diagram?

我是 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 或一些類似的 function。 有人可以幫我嗎?

我們可以破解 draw.triple.venn 的隱形 output 拋出的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"
# [...]

我們可以使用方括號 function `[[`()提取它們,將它們保存在兩個不同的臨時對象中,並使用所需的參數formatC big.mark=對它們進行格式化。 之后,我們將未觸及的臨時 object tmp2替換為修改后的臨時 object 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中用大標記修改的標簽,並告訴 R class"gList"

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

現在,我們可以使用grid.draw

grid.newpage()
grid.draw(V)

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM