r - 在 ggplot r 中为两组女性创建直方图
问题描述
我想创建一个直方图,显示每个年龄组(x 轴)的女性比例(y 轴)。我想为每个年龄组设置两个条形图,分别代表患有“N”疾病和没有“N”疾病的女性。
数据:
我审查过的与该主题相关的其他帖子:
我试过的代码:
ggplot(N_group, aes(x=Age_2, fill=Sex))+
geom_bar(aes( y=..count../tapply(..count.., ..x.. ,sum)[..x..]), position="dodge" ) +
geom_text(aes( y=..count../tapply(..count.., ..x.. ,sum)[..x..],
label=scales::percent(..count../tapply(..count.., ..x.. ,sum)[..x..]) ),
stat="count", position=position_dodge(0.9), vjust=-0.5)
这比较了患有“N”病的男性和女性。
解决方案
在这里,一个可能的解决方案是计算 的比例ggplot2
。
在这里,一个使用以下假数据框的示例:
df <- data.frame(ID = 1:40,
N = sample(c(0,1),40,replace = TRUE),
age_group = sample(1:4,40, replace = TRUE),
sex = sample(c("M","F"),40,replace = TRUE))
使用dplyr
包,您可以计算每个性别的每个年龄组的每个 N 组的比例:
library(dplyr)
df %>%
#group_by(sex, age_group, N, .drop = FALSE) %>%
count(sex, age_group, N) %>%
filter(sex =="F") %>%
group_by(age_group) %>%
mutate(Percent = n / sum(n))
# A tibble: 8 x 5
# Groups: age_group [4]
sex age_group N n Percent
<fct> <int> <dbl> <int> <dbl>
1 F 1 0 1 0.167
2 F 1 1 5 0.833
3 F 2 0 2 0.4
4 F 2 1 3 0.6
5 F 3 0 2 0.4
6 F 3 1 3 0.6
7 F 4 0 1 0.5
8 F 4 1 1 0.5
传递此管道序列为ggplot2
您提供以下图表:
library(dplyr)
library(ggplot2)
df %>%
count(sex, age_group, N) %>%
filter(sex =="F") %>%
group_by(age_group) %>%
mutate(Percent = n / sum(n)) %>%
ggplot(aes(x = age_group, y = Percent, fill = factor(N)))+
geom_col(position = position_dodge())+
scale_y_continuous(labels = scales::percent)
它回答了你的问题吗?
推荐阅读
- function - 使用观察函数调用在选择框中显示子类别列表的函数仅在第一次工作
- javascript - 在 d3 上使用 fs.createReadStream 构建折线图
- reactjs - Redux mapDispacthToProps - 从卸载事件调用时未调用道具
- google-apps-script - Google Apps 脚本 - 为什么 .getNextDataCell() 会跳过数据
- clean-css - clean-css-cli 使用 clean-css-cli 格式化媒体打印代码
- android - Android:在 SupportMapFragment 顶部未正确显示小吃栏
- javascript - 单击更改页面背景颜色页面
- arrays - 基于两个数组的唯一条目求和 | 速度问题
- javascript - Chart.js 如何同步平移和缩放多个聊天
- python-3.x - Python OS 轮询选择