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

如何在R管道中使用Plotly制作交互式分组条形图?

用Plotly在R管道中实现交互式分组条形图

问题背景

你作为R编程新手,希望用Plotly替代ggplot制作交互式分组条形图。原ggplot实现代码如下:

all_trips_v2 %>% 
  mutate(weekday = wday(started_at, label = TRUE)) %>% 
  group_by(member_casual, weekday) %>% 
  summarise(number_of_rides = n()
            ,average_duration = mean(ride_length)) %>% 
  arrange(member_casual, weekday)  %>% 
  ggplot(aes(x = weekday, y = number_of_rides, fill = member_casual)) +
  geom_col(position = "dodge")

你尝试在管道中用Plotly实现但未成功,代码如下:

all_trips_v2 %>% 
  mutate(weekday = wday(started_at, label = TRUE)) %>%  
  group_by(member_casual, weekday) %>%
  summarise(number_of_rides = n(), 
            average_duration = mean(ride_length)) %>%
  arrange(member_casual, weekday) %>%

  plot_ly(all_trips_v2, x = ~weekday, y = ~number_of_rides, type = 'bar', name = 'member') %>%
  add_trace(y = n_distinct(all_trips_v2$member_casual), name = 'casual') %>%
  layout(yaxis = list(title = 'Average duration'), barmode = 'group') 

你的疑问:是否可以在R管道中使用Plotly?或者有其他可行的实现方法?

解决方案

1. 管道中直接使用Plotly的正确写法

管道传递的是经过前序处理后的数据框,不需要在plot_ly中再次指定原始数据集all_trips_v2,用.指代管道传入的数据(或直接省略data参数,Plotly会自动识别)。同时无需手动拆分分组,利用color参数映射member_casual变量即可自动生成分组条形图:

all_trips_v2 %>% 
  mutate(weekday = wday(started_at, label = TRUE)) %>%  
  group_by(member_casual, weekday) %>%
  summarise(number_of_rides = n(), 
            average_duration = mean(ride_length)) %>%
  arrange(member_casual, weekday) %>%
  plot_ly(x = ~weekday, y = ~number_of_rides, color = ~member_casual, 
          type = 'bar', barmode = 'group') %>%
  layout(yaxis = list(title = "骑行次数"), 
         xaxis = list(title = "工作日"),
         legend = list(title = list(text = "用户类型")))

2. 分步实现(适合新手理解)

如果觉得链式管道容易混淆,可以先将处理好的数据存为对象,再进行可视化:

# 第一步:处理数据
processed_data <- all_trips_v2 %>% 
  mutate(weekday = wday(started_at, label = TRUE)) %>%  
  group_by(member_casual, weekday) %>%
  summarise(number_of_rides = n(), 
            average_duration = mean(ride_length)) %>%
  arrange(member_casual, weekday)

# 第二步:Plotly可视化
plot_ly(processed_data, x = ~weekday, y = ~number_of_rides, color = ~member_casual,
        type = 'bar', barmode = 'group') %>%
  layout(yaxis = list(title = "骑行次数"),
         xaxis = list(title = "工作日"),
         legend = list(title = list(text = "用户类型")))

关键问题说明

你之前的代码存在两个核心问题:

  • 错误地在plot_ly中传入原始数据集all_trips_v2,而非管道处理后的数据;
  • 手动用add_trace添加分组的逻辑错误,n_distinct(all_trips_v2$member_casual)仅计算用户类型数量,并非对应分组的骑行次数。

内容的提问来源于stack exchange,提问作者Spicy Ramen Noodles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:40:26