如何按Quality数值分组变量?ggplot2柱状图分组优化需求
解决方法
问题出在你直接用原始观测数据绘图,每个数据行对应一个独立的堆叠小块,导致相同Quality的类别分散。要实现相同Quality分组展示,需要先统计每个读者ID下各质量等级的频次,再基于汇总数据绘图:
步骤1:统计各分组的频次与占比
使用dplyr包对数据进行汇总统计:
library(dplyr) library(ggplot2) # 模拟原始数据 Quality <- sample(1:4, 300, replace = TRUE) reader_ID <- rep(1:3, each = 100) df <- data.frame(Quality, reader_ID) # 统计每个reader_ID + Quality组合的数量,并计算占比 df_summary <- df %>% count(reader_ID, Quality) %>% group_by(reader_ID) %>% mutate(percentage = n / sum(n)) %>% ungroup()
步骤2:基于汇总数据绘制分组堆叠柱状图
用汇总后的数据绘图,相同Quality的类别会自动合并为一个完整的块:
quality_percentage <- ggplot(df_summary, aes(x = reader_ID, y = percentage, fill = factor(Quality))) + geom_bar(stat = "identity", position = "fill") + # 将y轴转换为百分比格式 scale_y_continuous(labels = scales::percent) + # 设置坐标轴和图例标签 labs(x = "读者ID", y = "占比", fill = "质量等级") + theme_minimal() quality_percentage
这样生成的堆叠柱状图中,每个读者ID对应的柱子里,相同质量等级的部分会集中在一起,不会出现分散的情况。
内容的提问来源于stack exchange,提问作者dan_confused
相关产品推荐
相关产品推荐

