R语言 使用ggplot和geomtext显示每个子组中总性别组的百分比

syqv5f0l  于 2023-01-22  发布在  其他
关注(0)|答案(1)|浏览(161)

我已经尝试到处寻找这个问题的答案,但我仍然卡住了,所以在这里:
我有一个 Dataframe data_1,其中包含正在进行的潜在轮廓分析的数据,这个问题的关注变量是profilesgender
我想按配置文件绘制性别分布,但在每个配置文件中显示每种性别占该性别整个样本的百分比。例如,如果我们有10名女性,配置文件1中有5名女性,我希望配置文件1的女性栏顶部的文本显示50%。
现在我正在使用下面的代码,但它给我的是整个人口的百分比,而我只想与妇女总数相比的百分比。

ggplot(data = subset(data_1, !is.na(gender)),
       aes(x = gender, fill = gender)) + geom_bar() +
  facet_grid(cols=vars(profiles)) + theme_minimal() +
  scale_fill_brewer(palette = 'Accent', name = "Gender", 
                    labels = c("Non-binary", "Man", "Woman")) +
  labs(x = "Gender", title = "Gender distribution per LPA profile") +
  geom_text(aes(y = ((..count..)/sum(..count..)), 
                label = scales::percent((..count..)/sum(..count..))), 
            stat = "count", vjust = -28)

提前感谢您的帮助!
我尝试了多种替代方法,包括使用summarizemutate在数据集中创建变量,但不幸的是没有成功。

qjp7pelc

qjp7pelc1#

尽管看起来很混乱,但这可能是在ggplot2调用之外进行总结的最佳方法,可以这样做:

library(tidyverse)

data1 <- tibble(gender = sample(c("male", "female"), 100, replace = TRUE),
                profile = sample(c("profile1", "profile2"), 100, replace = TRUE))

data1 |> 
  count(gender, profile) |>
  group_by(gender) |> 
  mutate(perc = n / sum(n)) |> 
  ggplot(aes(x = gender, y = n, fill = gender)) +
  geom_col() +
  facet_grid(~profile) +
  geom_text(aes(y = n + 3, label = scales::percent(perc)))

facet_grid本质上是在执行任何值计算之前按profile对数据集进行分组,所以本质上它对其他方面的数据是盲目的。我认为唯一的方法是在调用之前总结并使用geom_col(默认值为stat = "identity")以绘制图。请注意,标签的y值是根据计数变量-R将相对于条形的计数值定位文本。

编辑-实际上没有,有一种“更简单”的方法

我撒了个谎,你 * 可以 * 在ggplot2调用中做到,但是有点混乱:

data1 |>
  ggplot(aes(x = gender, fill = gender)) +
  geom_bar() +
  facet_grid(~ profile) +
  stat_count(aes(y = after_stat(count) + 2,
              label = scales::percent(after_stat(count) / 
                                      tapply(after_stat(count), 
                                             after_stat(group), 
                                             sum)[after_stat(group)]
                 )),
             geom = "text")

Code borrowed from hereafter_stat(group)部分跨两个方面访问分组的gender计数。今天我学到了一些东西!

相关问题