首页 > 解决方案 > 来自 group_by Tibble Not Stacking 的堆积条形图

问题描述

我正在使用 R 并且有一个 tibble 按年龄和种族汇总学徒人数。人们被归类为少数种族/民族或白人。

 RA3<- structure(list(Age = c(18, 18, 19, 19, 20, 20, 21, 21, 22, 23, 
23, 24, 24, 25, 25, 26, 26, 27, 29, 29, 31, 33, 37, 39, 39, 42, 
47, 47, 49, 49, 50, 50, 52, 57, 57, 60, 66, 66), Minority = c("Minority", 
"White", "Minority", "White", "Minority", "White", "Minority", 
"White", "White", "Minority", "White", "Minority", "White", "Minority", 
"White", "Minority", "White", "Minority", "Minority", "White", 
"White", "White", "Minority", "Minority", "White", "Minority", 
"Minority", "White", "Minority", "White", "Minority", "White", 
"Minority", "Minority", "White", "White", "Minority", "White"
), n = c(3L, 1L, 4L, 3L, 5L, 2L, 1L, 2L, 3L, 3L, 1L, 2L, 3L, 
8L, 2L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 2L, 1L, 1L, 2L, 3L, 5L, 1L, 
3L, 1L, 1L, 2L, 1L, 2L, 1L, 3L, 1L)), row.names = c(NA, -38L), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), groups = structure(list(Age = c(18, 
18, 19, 19, 20, 20, 21, 21, 22, 23, 23, 24, 24, 25, 25, 26, 26, 
27, 29, 29, 31, 33, 37, 39, 39, 42, 47, 47, 49, 49, 50, 50, 52, 
57, 57, 60, 66, 66), Minority = c("Minority", "White", "Minority", 
"White", "Minority", "White", "Minority", "White", "White", "Minority", 
"White", "Minority", "White", "Minority", "White", "Minority", 
"White", "Minority", "Minority", "White", "White", "White", "Minority", 
"Minority", "White", "Minority", "Minority", "White", "Minority", 
"White", "Minority", "White", "Minority", "Minority", "White", 
"White", "Minority", "White"), .rows = list(1L, 2L, 3L, 4L, 5L, 
    6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 
    19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 
    31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L)), row.names = c(NA, 
-38L), class = c("tbl_df", "tbl", "data.frame"), .drop = TRUE))

我正在尝试在 R 中创建一个堆积条形图,该条形图ggplot将显示每个年龄类别的少数族裔/白人学徒人数。

但是,当我运行我的代码时:

libraray(ggplot2)
BarChartRA <- ggplot(RA3, aes(x = Age, y =n, fill = Minority)) + 
  geom_bar(data = subset(RA3, Minority == "Minority"), stat = "identity", position = position_stack()) +
  geom_bar(data = subset(RA3, Minority == "White"), stat = "identity", position = position_stack()) +
  scale_fill_manual(values=c("purple","dark green"))+
  labs(x = "Age(Years)", y = "Number of OJ's", title = "Number of Registered Apprenticeships by Race/Ethnicity, Colorado, 2018")
BarChartRA

我似乎没有得到堆积图。

在此处输入图像描述

例如,在 18 岁时(最左边)应该有 3 个少数族裔学徒和 1 个白人学徒,总共 4 个。但如您所见,条形图仅显示 3 个。这些课程相互重叠。

我认为position = "stack"声明中的geom_bar声明会解决这个问题。

我究竟做错了什么?

标签: rggplot2bar-chartdata-visualization

解决方案


由于您已经在顶层定义了映射ggplot(RA3, aes(x = Age, y =n, fill = Minority)),并且您的数据以长格式整理,您可以简单地执行此操作

library(ggplot2)
df %>% ggplot(aes(x = Age, y = n, fill = Minority)) +
  geom_bar(stat = "identity",
           position = "stack") +
  scale_y_continuous(breaks = c(0:10))

如您所见,fill美学根据Minority列对数据进行分组,并将相应地堆叠条形。

我相信你的情节发生了什么,因为你已经指定了整个表格然后将其子集两次并设置它position = "stack"只是将一个栏叠加在另一个栏上。


推荐阅读