为 geom_bar 添加一个包含每组总计数的栏

问题描述 投票:0回答:2

我正在尝试制作一个包含两个分组变量的条形图,其中还包括一个包含一组总计数的条形图。下面的代码按照我想要的方式为我提供了一个包含两个分组变量的条形图,但我还想添加 2016 年和 2017 年的另一个条形图以及

grp
变量的总和(2016 年为 12 个,2017 年为 15 个) .

x<-data.frame(grp=rep(c("x1",  "x2", "x3"), 9), yr=c(rep(2016,4), rep(2017,5)))

ggplot(x)+
  geom_bar(aes(x=yr, fill=grp), position="dodge")
r ggplot2 geom-bar
2个回答
1
投票

这有点笨拙,但我找到了解决方案:使用

rbind
将包含总计的组添加到数据框:

x<-data.frame(grp=rep(c("x1",  "x2", "x3"), 9), yr=c(rep(2016,4), rep(2017,5))) %>%
   rbind(data.frame(grp="total", yr=c(rep(2016, 12), rep(2017, 15))))  

 ggplot(x)+   geom_bar(aes(x=yr, fill=grp), position="dodge")

0
投票

我不喜欢对值进行硬编码。在这里,我使用

janitor::adorn_totals
来获取总数:

x<-data.frame(grp=rep(c("x1", "x2", "x3"), 9), 
              yr=c(rep(2016, 4), rep(2017, 5)))

library(tidyverse)
library(janitor)

x %>% 
  mutate(yr = as.character(yr)) %>% 
  summarise(count = n(), .by = c(grp, yr)) %>% 
  group_split(yr) %>% 
  map_dfr(~adorn_totals(.x, , fill = NA)) %>% 
  fill(yr) %>% 
ggplot()+
  geom_bar(aes(x=yr, y=count, fill=grp), position="dodge", stat = "identity")

创建于 2024-04-09,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.