R语言 向条形图添加百分比标签

cig3rfwq  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(120)

如何使用geom_textggplot2中的每个条形图顶部添加百分比标签?我知道有几个类似的问题已经得到了回答。但他们要么只使用1个分类变量,要么在绘图前计算百分比。
我有以下情节:

ggplot(data = mtcars)+
  geom_bar(aes(x = factor(cyl), 
               y = (..count..)/sum(..count..)*100,
               fill = factor(gear)),
           position = "dodge")

现在我想在顶部添加百分比标签。如果我在geom_text中使用y = (..count..)/sum(..count..)*100,它会显示为Error in eval(expr, envir, enclos) : object 'count' not found

mwngjboj

mwngjboj1#

在ggplot之外,预先计算所需的量是最简单的,因为很难跟踪ggplot计算的内容以及这些量存储和可用的位置。
首先,总结你的数据:

library(dplyr)
library(ggplot2)

mtcars %>% 
    count(cyl = factor(cyl), gear = factor(gear)) %>% 
    mutate(pct = prop.table(n))
#> # A tibble: 8 x 4
#>   cyl   gear      n    pct
#>   <fct> <fct> <int>  <dbl>
#> 1 4     3         1 0.0312
#> 2 4     4         8 0.25  
#> 3 4     5         2 0.0625
#> 4 6     3         2 0.0625
#> 5 6     4         4 0.125 
#> 6 6     5         1 0.0312
#> 7 8     3        12 0.375 
#> 8 8     5         2 0.0625

保存,或者直接导入ggplot:

mtcars %>% 
    count(cyl = factor(cyl), gear = factor(gear)) %>% 
    mutate(pct = prop.table(n)) %>% 
    ggplot(aes(x = cyl, y = pct, fill = gear, label = scales::percent(pct))) + 
    geom_col(position = 'dodge') + 
    geom_text(position = position_dodge(width = .9),    # move to center of bars
              vjust = -0.5,    # nudge above top of bar
              size = 3) + 
    scale_y_continuous(labels = scales::percent)

如果你真的想把它全部保存在ggplot内部,你可以使用geom_textstat = 'count'(或者stat_countgeom = "text",如果你喜欢的话):

ggplot(data = mtcars, aes(x = factor(cyl), 
                          y = prop.table(stat(count)), 
                          fill = factor(gear), 
                          label = scales::percent(prop.table(stat(count))))) +
    geom_bar(position = "dodge") + 
    geom_text(stat = 'count',
              position = position_dodge(.9), 
              vjust = -0.5, 
              size = 3) + 
    scale_y_continuous(labels = scales::percent) + 
    labs(x = 'cyl', y = 'pct', fill = 'gear')

它的情节完全一样

相关问题