【发布时间】:2025-12-10 13:55:01
【问题描述】:
我正在尝试在 ggplot2 中创建一个堆积条形图,以显示对应于每个分类变量的值的百分比。这是我正在尝试使用的数据示例。
sampledf <- data.frame("Death" = rep(0:1, each = 5),
"HabitA" = rep(0:1, c(3, 7)),
"HabitB" = rep(1:2, c(4, 6)),
"HabitC" = rep(0:1, c(6, 4)))
每个习惯都是我用来创建堆积条形图的列,我想使用 facet_grid 中的 Death 列。我希望在条形图中显示每个习惯的值的百分比。
我认为创建图表所需的输出数据应转换为,在 Death = 0 下,HabitA 有 60% 0 的值,40% 的值为 1,而在 Death = 1 下,HabitA 的 100%值为 1。
我使用 ggplot 和 group_by 制作了这样的图表,仅针对一个属性进行汇总,但我不确定这如何处理数据中的多个分类属性。
sampledf %>%
group_by(Death, HabitA) %>%
summarise(count=n()) %>%
mutate(perc=count/sum(count))
这会产生我想要的一个变量,但是当我在 group by 参数中包含另一个属性时,它会返回所有 3 个属性组合的百分比,这不是我想要的。我尝试使用 summarise_at/mutate_at 但它似乎不起作用。
sampledf %>%
group_by(Death) %>%
mutate_at(c("HabitA", "HabitB"), Counts = n())
在 R 中是否有一种直接的方法可以做到这一点,并将结果数据用作 ggplot2 的输入?
编辑:
我试图重塑数据并使用长表格来构建我的情节。这就是我所拥有的。
long <- melt(sampledf, id.vars = c("Death"))
结果数据就是这种格式。
Death variable value
1 0 HabitA 0
2 0 HabitA 0
3 0 HabitA 0
4 0 HabitA 1
5 0 HabitA 1
6 1 HabitA 1
7 1 HabitA 1
我不确定如何使用value 属性来构建绘图,因为我目前正在尝试构建的ggplot 正在计算variable 列中每个级别出现的总次数。
ggplot(long, aes(x = variable, fill = variable)) +
geom_bar(stat = "count", position = "dodge") + facet_grid(~ Death)
【问题讨论】:
-
您可以考虑在汇总和绘图之前将数据集重新整形为长格式。有关如何执行此操作的一些选项,请参阅here。
标签: r ggplot2 dplyr bar-chart facet-grid