我正在制作一系列条形图,其中百分比值位于每个条形上方。我想将其舍入到小数点后0位,但默认为1小数点后一位。这是使用mtcars的示例。

library(ggplot2)
library(scales)

d <- mtcars

g <- ggplot(d, aes(gear)) +
geom_bar(aes(y = (..count..)/sum(..count..), fill=factor(..x..)), stat= "count")+
geom_text(aes(label = scales::percent((..count..)/sum(..count..)),
            y= ((..count..)/sum(..count..))), stat="count",
        vjust = -.25)


这给您:r - 在geom_text中,可以对“labels = scales::percent”进行舍入吗?-LMLPHP

有没有办法将它们四舍五入到最接近的整数,以使条分别标记为47%,38%和16%?

解决方法可能包括手动注释标签或生成要从中拉标签的汇总data.frame。但是,由于要生成大量表,因此我更希望将所有代码都包含在单个ggplot命令中。

最佳答案

这是对您当前代码的最小更改,它将满足您的要求:

library(ggplot2)
library(scales)

d <- mtcars

g <- ggplot(d, aes(gear)) +
geom_bar(aes(y = (..count..)/sum(..count..), fill=factor(..x..)), stat= "count")+
geom_text(aes(label = scales::percent(round((..count..)/sum(..count..),2)),
            y= ((..count..)/sum(..count..))), stat="count",
        vjust = -.25)


我在您的部门中添加了对round(...,2)的调用,该调用将在将比率传递给percent之前将其取整。



就个人而言,我将在ggplot之外执行此操作以使代码清晰。

library(ggplot2)
library(scales)
library(dplyr)

d <- mtcars %>%
  group_by(gear) %>%
  summarise(Count = n()) %>%
  mutate( gear = factor(gear),
    Ratio = Count / sum(Count),
         label = percent(Ratio %>% round(2)))

g <- ggplot(d, aes(x=gear,y=Ratio,label=label,fill=gear)) +
  geom_bar(stat='identity') +
  geom_text(vjust=0)
g


当我不得不回头查看6个月内的内容时,弄清楚我做了什么会容易得多。

关于r - 在geom_text中,可以对“labels = scales::percent”进行舍入吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41148673/

10-12 19:16