You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:05:12