Как добавить разделитель запятой в диаграмму Венна

В r есть способ добавить разделитель запятой к тысячам на диаграмме Венна.

venn.plot <- VennDiagram::draw.pairwise.venn(10000, 7000, 3000, c("First", "Second"), scaled = FALSE)

grid::grid.draw(venn.plot)

Полученная диаграмма выглядит так, как показано ниже.

введите здесь описание изображения


person user3357059    schedule 29.03.2017    source источник


Ответы (3)


Не похоже, чтобы эта функция была предназначена для этого. Если вы действительно хотите использовать эту функцию, вы можете «взломать» ее, чтобы заменить код форматирования по умолчанию, который она использует для меток. Обратите внимание, что этот метод очень ненадежен, поскольку мы редактируем определенные «строки» кода. Сначала сделайте копию функции

myvenn <- VennDiagram::draw.pairwise.venn

Вот форматтер по умолчанию

body(myvenn)[[46]]
# wrapLab <- function(num) {
#     stri = ""
#     if (print.mode[1] == "percent") {
#         stri <- paste(signif(num * 100/denom, digits = sigdigs), 
#             "%", sep = "")
#         if (isTRUE(print.mode[2] == "raw")) {
#             stri <- paste(stri, "\n(", num, ")", sep = "")
#         }
#     }
#     if (print.mode[1] == "raw") {
#         stri <- num
#         if (isTRUE(print.mode[2] == "percent")) {
#             stri <- paste(stri, "\n(", paste(signif(num * 100/denom, 
#                 digits = sigdigs), "%)", sep = ""), sep = "")
#         }
#     }
#     return(stri)
# }

Давайте заменим это вызовом prettyNum, чтобы добавить запятые

body(myvenn)[[46]][[3]] <- quote(function(x) {
    prettyNum(x ,big.mark=",",scientific=FALSE)
})

Теперь мы можем вызвать нашу версию функции

venn.plot <- myvenn(10000, 7000, 3000, c("First", "Second"), scaled = FALSE)
grid::grid.draw(venn.plot)

введите здесь описание изображения

person MrFlick    schedule 29.03.2017

Вы также можете редактировать элементы вручную.

venn.plot[[5]][["label"]] <- "7,000"
venn.plot[[6]][["label"]] <- "4,000"
venn.plot[[7]][["label"]] <- "3,000"

grid::grid.draw(venn.plot)

введите здесь описание изображения

person Johan Larsson    schedule 30.03.2017

Вот еще один способ с петлей

venn.plot <- VennDiagram::draw.pairwise.venn(10000, 7000, 3000, c("First", "Second"), scaled = FALSE)

for(i in 1:length(venn.plot)){

 if(!is.null(venn.plot[[i]][["label"]]) &&
    !is.na(as.numeric(venn.plot[[i]][["label"]]))
 ) {

    venn.plot[[i]][["label"]] <- prettyNum(venn.plot[[i]][["label"]], big.mark = ",")

 }
 }

Warning messages:
1: NAs introduced by coercion 
2: NAs introduced by coercion 
grid::grid.draw(venn.plot)
person user3357059    schedule 22.12.2017