r - 如何按组和子组创建堆叠条形图(ggplot)
问题描述
我没有成功尝试使用以下数据框使用 ggplot 创建条形图:
test <- data.frame(group=c("A", "A", "B", "B"),
gender=c(0,1,0,1),
percent1=c(2,3,4,3),
percent2=c(1,2,0.5,1))
我想做的是创建一个条形图。X 轴:按字母('A'、'B')分组,并按性别(0 或 1)拆分这些组。Y 轴:percent1 和 percent2 的值相互叠加
我最“成功”的解决方案:我简化了我的数据框,之后下面的代码给了我下面的条形图。但是,我没有设法创建子组。我使用了“facet_wrap”和“facet_grid”,但因此未能从这些中创建一个图。
问题:如何制作按组和子组排列的堆叠条形图?
# require(ggplot)
# require(reshape)
dfr <- data.frame(percent1 = c(2,3,4,3,1,5),
percent2 = c(1,2,0.5,1,1,1),
row.names = c("A female", "A male", "B female", "B male", "C female", "C male"))
dfr$category <- row.names(dfr)
mdfr<-melt(dfr, id.vars="category")
plot <- ggplot(mdfr, aes(category, value, fill=variable)) +
geom_bar(stat = "identity")
解决方案
问题是您混淆了gender
一个group
变量。利用tidyr::pivot_longer
重塑您的数据集,您可以实现如下结果:
test <- data.frame(group=c("A", "A", "B", "B"),
gender=c(0,1,0,1),
percent1=c(2,3,4,3),
percent2=c(1,2,0.5,1))
library(ggplot2)
library(dplyr)
library(tidyr)
test %>%
mutate(gender = recode(gender, "0" = "male", "1" = "female")) %>%
pivot_longer(starts_with("percent")) %>%
ggplot(aes(gender, value, fill = name)) +
geom_col() +
facet_wrap(~group)
推荐阅读
- reactjs - JSX 道具不应该使用函数 react/jsx-no-bind
- r - 如何使用 distill 更改 R 博客的预览图像布局
- android - 如何解决flutter config --android studio期间出现的问题?
- flask - 如何使用 WTForms 单独渲染单选按钮?
- javascript - 如何在嵌套数组中使用嵌套循环
- laravel - Laravel docker API 路由不工作,但网络路由工作
- python-3.x - 如何将单元格样式从多个输入 xlsx 文件复制到具有多个工作表的多个输出 xlsx 文件
- c# - 我可以使用多线程和并行编程进行网络抓取吗?
- python - Pandas 和 numpy 之间的语法逻辑
- docusignapi - 嵌入式 DocuSign 签名:会话超时页面