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
相关产品推荐
相关产品推荐

