Как добавить запятую в тройной диаграмме Венна? - PullRequest
1 голос
/ 10 апреля 2020

Я новичок в 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 или некоторые другие. аналогичная функция. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 10 апреля 2020

Мы могли бы взломать гроб, созданный невидимым выводом 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, где значения чисел c не являются 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)

enter image description here

...