在不同年龄组Rstudio中以条形图显示百分比和计数

icomxhvb  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(202)

我试图绘制条形图,以显示总人口的男性和女性按他们的年龄组,我用下面的代码得到的图表。

p1<- ggplot(data=people,aes(x=AgeGroup,fill=sex))
p1<- p1+ geom_bar()+
     geom_text(stat="count", aes(label=after_stat(count)), vjust=-1)
p1<-p1+theme_minimal()
p1<-p1+theme(axis.text.x=element_text(angle=90,hjust=0))
p1

在下图中,计数文本(男性和女性)合并,而不是以各自的位置/颜色显示。
1.我想显示男性和女性在各自位置/颜色的总数。
1.其次,我还需要帮助显示男性和女性在各自年龄组和颜色中的百分比沿着总数。在这种情况下,我的Y轴可以是空的。

g6baxovj

g6baxovj1#

您需要在文本层中添加group美学元素,如果您希望它与条形图匹配,还需要确保将其设置为position = position_stack()。为每个组添加百分比更为复杂,需要进行一些动态数据处理:

library(tidyverse)

ggplot(data = people, aes(x = AgeGroup)) + 
  geom_bar(aes(fill = sex)) +
  geom_text(data = . %>% group_by(sex, AgeGroup) %>% 
              summarize(n = n()) %>% group_by(AgeGroup) %>%
              summarize(sex = sex, n = n, perc = n / sum(n)),
              aes(y = n, label = paste(scales::comma(n), 
                                       scales::percent(perc, 0.1), 
                                       sep = '\n'), group = sex), 
            position = position_stack(vjust = 0.5)) +
  geom_text(stat = "count", aes(label = scales::comma(after_stat(count))),
            nudge_y = 10000, fontface = 2) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 0),
        axis.text.y.left = element_blank(),
        axis.title.y.left = element_blank())

使用的数据(从相关图像推断)

people <- data.frame(sex = rep(c('F', 'M'), c(514729, 470971)), 
                     AgeGroup = rep(rep(c("18-25 years", "26-35 years",
                                          "36-45 years", "46-55 years",
                                          "55-65 years", "66-75 years",
                                          "76-85 years", "86+ years"), 2),
                                    times = c(40608, 80464, 85973, 72863, 72034,
                                              62862, 54588, 45337, 37341, 77383,
                                              83620, 67367, 67190, 64193, 49171,
                                              24706)))

相关问题