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

R ggplot2绘图前如何筛选数据分别绘制会员/临时用户骑行图表

你可以通过两种方式实现需求,根据自己的使用场景选择即可:

方法1:分别生成两张独立图表

在数据处理链路最前端加入filter()函数,筛选member_casual字段的对应取值即可,注意筛选后分组逻辑不需要再包含member_casual字段。

  • 仅统计临时用户(casual)的代码:
all_trips_v2 %>% 
  filter(member_casual == "casual") %>%
  mutate(weekday = wday(started_at, label = TRUE)) %>% 
  group_by(weekday, rideable_type) %>% 
  summarise(number_of_rides = n(),
            average_duration = mean(ride_length),
            .groups = "drop") %>% 
  arrange(weekday)  %>% 
  ggplot(aes(x = weekday, y = number_of_rides , fill = rideable_type)) +
  geom_col(position = "dodge") +
  labs(title = "临时用户分车型周骑行量统计")
  • 仅统计会员(member)的代码:
all_trips_v2 %>% 
  filter(member_casual == "member") %>%
  mutate(weekday = wday(started_at, label = TRUE)) %>% 
  group_by(weekday, rideable_type) %>% 
  summarise(number_of_rides = n(),
            average_duration = mean(ride_length),
            .groups = "drop") %>% 
  arrange(weekday)  %>% 
  ggplot(aes(x = weekday, y = number_of_rides , fill = rideable_type)) +
  geom_col(position = "dodge") +
  labs(title = "会员用户分车型周骑行量统计")

方法2:单画布分面对比两类用户数据

如果需要把两类用户的统计结果放在同一张图中方便横向对比,不需要单独筛选数据,直接在ggplot图层中加入分面函数即可,代码更简洁:

all_trips_v2 %>% 
  mutate(weekday = wday(started_at, label = TRUE)) %>% 
  group_by(member_casual, weekday, rideable_type) %>% 
  summarise(number_of_rides = n(),
            average_duration = mean(ride_length),
            .groups = "drop") %>% 
  arrange(member_casual, weekday)  %>% 
  ggplot(aes(x = weekday, y = number_of_rides , fill = rideable_type)) +
  geom_col(position = "dodge") +
  facet_wrap(~member_casual,
             labeller = as_labeller(c("casual" = "临时用户", "member" = "会员用户"))) +
  labs(title = "不同用户类型分车型周骑行量对比")

补充说明:代码中summarise()里新增的.groups = "drop"参数用于取消统计后的残留分组,避免触发dplyr版本的分组警告,也不会干扰后续数据操作。

内容的提问来源于stack exchange,提问作者Kevin Lam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:48:28