ggplot2 使用 ...prop... 并按另一个类别对条形图进行分组时出现问题

Syr*_*rpe 5 r ggplot2 geom-bar facet-grid

StudentData <- data.frame(gender = sample( c("male","female"), 100, replace=TRUE),
              degree = sample( c("Associates", "Masters", "PhD"), 100, replace=TRUE),
              category = sample( c("Audit", "Credit"), 100, replace=TRUE))
Run Code Online (Sandbox Code Playgroud)

在下面的数据集中,我尝试创建一个条形图,绘制具有副学士学位、硕士学位或博士学位的样本的百分比,按性别分隔(通过使用 facet_grid() 完成)。这是我到目前为止生成的:

StudentData %>% ggplot(., aes(x=degree, group=gender)) + 
            geom_bar(aes(y=..prop..), stat="count", position=position_dodge()) +
            geom_text(aes(label=scales::percent(round(..prop..,2)), 
            y=..prop..), stat="count", vjust=-.5) +
            scale_y_continuous(limits=c(0,1),labels = scales::percent) +
            ylab("Percent of Sample") +
            facet_grid(~gender)
Run Code Online (Sandbox Code Playgroud)

但是,我还想将每个图表上的“审计”和“信用”组之间的差异显示为并排条形。然而,当我将“fill=category”添加到 ggplot 的美学中时,没有任何变化:

StudentData %>% ggplot(., aes(x=degree, group=gender, fill=category)) + 
            geom_bar(aes(y=..prop..), stat="count", position=position_dodge()) +
            geom_text(aes(label=scales::percent(round(..prop..,2)), 
            y=..prop..), stat="count", vjust=-.5) +
            scale_y_continuous(limits=c(0,1),labels = scales::percent) +
            ylab("Percent of Sample") +
            facet_grid(~gender)
Run Code Online (Sandbox Code Playgroud)

我意识到这通常是使用完成的geom_bar(stat="identity", position=position_dodge()),但是当我更改时stat="identity",会出现以下错误消息:

Error in FUN(X[[i]], ...) : object 'prop' not found

知道如何制作构面图,使用特殊字符(例如 ..prop.. )并向 ggplot2 图中添加另一个填充吗?

luk*_*keA 3

您可以像这样创建必要的四个group(而不是两个):

StudentData %>% 
  ggplot(., aes(x=degree, group=interaction(gender, category), fill=category)) + 
  geom_bar(aes(y=..prop..), stat="count", position=position_dodge()) +
  geom_text(aes(label=scales::percent(round(..prop..,2)), 
                y=..prop..), stat="count", vjust=-.5, position=position_dodge(.9)) +
  scale_y_continuous(limits=c(0,1),labels = scales::percent) +
  ylab("Percent of Sample") +
  facet_grid(~gender) 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 在 ggplot2 版本 3.xx 中,您可以使用 `stat(prop)` 代替 `..prop..` (2认同)