使用facet_grid绘制分组环形图失败,member组图表不完整
问题原因与解决方法
你的问题出在**ymin的计算没有按member_casual分组处理**——当前的ymin是对整个数据集做全局的c(0, head(subdata.frame$ymax, n=-1)),但ymax是按用户组分别计算的累积占比,跨组的累积值会打乱区间逻辑,导致其中一个环形图的扇形区间出错,显示不完整。
修正步骤
1. 修正数据处理代码
把ymin的计算整合到分组流程里,确保每个用户组内单独生成对应的ymin值:
subdata.frame <- data.frame(subdata) %>% group_by(member_casual) %>% count(rideable_type) %>% mutate(prop = n/sum(n)) %>% mutate(ymax = cumsum(prop)) %>% # 按分组生成ymin:每组第一个值的ymin为0,其余取前一个的ymax mutate(ymin = lag(ymax, default = 0)) %>% ungroup()
这里用lag(ymax, default = 0)替代全局赋值,能自动在每个分组内生成正确的区间最小值,避免跨组干扰。
2. 验证绘图效果
用修正后的数据重新运行你的绘图代码即可:
ggplot(subdata.frame, aes(ymax=ymax, ymin=ymin, xmax=4, xmin=3, fill=rideable_type)) + geom_rect() + scale_fill_brewer(palette=4) + facet_grid(~member_casual) + coord_polar(theta="y") + xlim(c(2, 4)) + theme_void()
此时两个用户组的环形图都会完整显示各车型的占比扇形。
额外优化提示
如果想让环形图的标签更清晰,可以添加文本标注(比如占比数值),用geom_text配合极坐标转换:
ggplot(subdata.frame, aes(ymax=ymax, ymin=ymin, xmax=4, xmin=3, fill=rideable_type)) + geom_rect() + # 添加占比标签,位置取区间中点 geom_text(aes(x = 3.5, y = (ymin + ymax)/2, label = paste0(round(prop*100), "%"))) + scale_fill_brewer(palette=4) + facet_grid(~member_casual) + coord_polar(theta="y") + xlim(c(2, 4)) + theme_void()
内容的提问来源于stack exchange,提问作者Bruno Jhonata Morinel
相关产品推荐
相关产品推荐

