【问题标题】:How to add comma separator in triple venn diagram?如何在三重维恩图中添加逗号分隔符?
【发布时间】:2020-07-22 21:08:48
【问题描述】:

我是 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 或一些类似的功能。有人可以帮帮我吗?

【问题讨论】:

    标签: r number-formatting venn-diagram grob


    【解决方案1】:

    我们可以破解 draw.triple.venn 的不可见输出所引发的 grob。

    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"
    # [...]
    

    我们可以使用方括号函数`[[`() 提取它们,将它们保存在两个不同的临时对象中,然后使用所需的参数big.mark= 将它们保存在formatC 中。之后,我们将未触及的临时对象 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多