我尝试使用 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 轴:百分比 1 和百分比 2 的值相互叠加
我最“成功”的解决方案:我简化了我的数据框,之后下面的代码给了我下面的条形图。但是,我没有设法创建子组。我使用了“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")
答案 0 :(得分:0)
问题在于您将 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)