r/ggplot:计算组内的条形图共享

r/ggplot:计算组内的条形图共享,r,ggplot2,dplyr,geom-bar,R,Ggplot2,Dplyr,Geom Bar,我正在使用ggplot2制作一个条形图,该条形图由一个变量分组并在共享中报告 我希望百分比是分组变量的百分比,而不是整个数据集的百分比 比如说, library(ggplot2) library(tidyverse) ggplot(mtcars, aes(x = as.factor(cyl), y = (..count..) / sum(..count..), fill = as.factor(gear))) + geom_bar

我正在使用
ggplot2
制作一个条形图,该条形图由一个变量分组并在共享中报告

我希望百分比是分组变量的百分比,而不是整个数据集的百分比

比如说,

library(ggplot2)
library(tidyverse)

ggplot(mtcars, aes(x = as.factor(cyl), 
               y = (..count..) / sum(..count..),
               fill = as.factor(gear))) + 
geom_bar(position = position_dodge(preserve = "single")) + 
geom_text(aes(label = scales::percent((..count..)/sum(..count..)),
        y= ((..count..)/sum(..count..))), stat="count") + 
theme(legend.position = "none")
生成此输出:

我希望百分比(和条高)反映“在
cyl
内”的比例,而不是在整个样本中共享。这可能吗?这会涉及一个
stat
参数吗

另一方面,如果可以将
geom_文本
调用类似地放置在理想的相关条上。任何指导都将不胜感激。

这里有一种方法:

library(dplyr)
library(ggplot2)

mtcars %>%
  count(cyl, gear) %>%
  group_by(cyl) %>%
  mutate(prop = prop.table(n) * 100) %>%
  ggplot() + aes(cyl, prop, fill = factor(gear), 
                 label = paste0(round(prop, 2), '%')) + 
  geom_col(position = "dodge") + 
  geom_text(position = position_dodge(width = 2), vjust = -0.5, hjust = 0.5)
这里有一种方法:

library(dplyr)
library(ggplot2)

mtcars %>%
  count(cyl, gear) %>%
  group_by(cyl) %>%
  mutate(prop = prop.table(n) * 100) %>%
  ggplot() + aes(cyl, prop, fill = factor(gear), 
                 label = paste0(round(prop, 2), '%')) + 
  geom_col(position = "dodge") + 
  geom_text(position = position_dodge(width = 2), vjust = -0.5, hjust = 0.5)

嗯,我从未尝试过在
ggplot
或geom之外添加
aes
。每天学习新东西:-)是的,我经常看到人们在
ggplot
内部使用
aes
,但不知何故,我已经习惯了做相反的事情。嗯,我从未尝试在
ggplot
或geom之外添加
aes
。每天学习新东西:-)是的,我经常看到人们在
ggplot
内部使用
aes
,但不知何故,我已经习惯了相反的做法。