ggplot2如何设置堆叠面积图y轴以展示Type的计数或占比?
解决方法
要实现展示每个Time对应的Type元素计数或占比的堆叠面积图,不能直接使用原始未聚合的数据集,需要先对数据做分组统计,再设置对应的y轴参数:
1. 展示计数
先统计每个Time和Type组合的出现次数,再将y轴参数设为统计得到的计数值:
library(dplyr) library(ggplot2) # 统计各Time-Type组合的计数 ds_count <- ds %>% count(Time, Type, name = "Count") # 绘制堆叠面积图 ggplot(ds_count, aes(x = Time, y = Count, fill = Type)) + geom_area(stat = "identity")
这里y = Count对应每个分组的计数,stat = "identity"指定ggplot直接使用数据中的y值,无需额外计算。
2. 展示占比
如果要展示每个Time下各Type的占比,先计算占比后,将y轴参数设为占比值:
# 统计各Time下Type的占比 ds_prop <- ds %>% count(Time, Type) %>% group_by(Time) %>% mutate(Proportion = n / sum(n)) %>% ungroup() # 绘制堆叠面积图 ggplot(ds_prop, aes(x = Time, y = Proportion, fill = Type)) + geom_area(stat = "identity")
这里y = Proportion对应每个Type在对应Time下的占比,堆叠后每个Time对应的总面积为1(即100%)。
注意:geom_area要求每个x-分组组合有唯一的y值,因此必须先完成数据的聚合统计,再指定对应的y轴参数。
内容的提问来源于stack exchange,提问作者Ask
相关产品推荐
相关产品推荐

