我已经尝试到处寻找这个问题的答案,但我仍然卡住了,所以在这里:
我有一个 Dataframe data_1
,其中包含正在进行的潜在轮廓分析的数据,这个问题的关注变量是profiles
和gender
。
我想按配置文件绘制性别分布,但在每个配置文件中显示每种性别占该性别整个样本的百分比。例如,如果我们有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)
提前感谢您的帮助!
我尝试了多种替代方法,包括使用summarize
和mutate
在数据集中创建变量,但不幸的是没有成功。
1条答案
按热度按时间qjp7pelc1#
尽管看起来很混乱,但这可能是在
ggplot2
调用之外进行总结的最佳方法,可以这样做:facet_grid
本质上是在执行任何值计算之前按profile
对数据集进行分组,所以本质上它对其他方面的数据是盲目的。我认为唯一的方法是在调用之前总结并使用geom_col
(默认值为stat = "identity"
)以绘制图。请注意,标签的y
值是根据计数变量-R将相对于条形的计数值定位文本。编辑-实际上没有,有一种“更简单”的方法
我撒了个谎,你 * 可以 * 在
ggplot2
调用中做到,但是有点混乱:Code borrowed from here。
after_stat(group)
部分跨两个方面访问分组的gender
计数。今天我学到了一些东西!