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

如何在crosstalk环境下实现plot_ly图表的分面操作

解决方案

核心逻辑是不拆分原始SharedData对象,避免破坏crosstalk的筛选联动绑定,通过subplot拼接单类别的子图实现分面效果,所有子图共享全局筛选状态。

可运行实现代码

library(plotly)
library(crosstalk)
library(dplyr)

# 全局共享数据对象,维持筛选联动绑定
iris_sh <- iris %>% SharedData$new(group = "iris_global")

# 筛选滑块绑定全局共享数据,作用于所有子图
filter_slider(id = "1", label = "whatevs",
              sharedData = iris_sh, column = ~Sepal.Length)

# 按Species分别绘制子图,从全局共享数据筛选对应类别即可,不破坏原有绑定
p1 <- plot_ly(iris_sh %>% filter(Species == "setosa"), 
              x = ~Sepal.Width, y = ~Petal.Width, color = ~Species) %>% 
  add_markers(showlegend = FALSE) %>% 
  layout(title = "setosa")

p2 <- plot_ly(iris_sh %>% filter(Species == "versicolor"), 
              x = ~Sepal.Width, y = ~Petal.Width, color = ~Species) %>% 
  add_markers(showlegend = FALSE) %>% 
  layout(title = "versicolor")

p3 <- plot_ly(iris_sh %>% filter(Species == "virginica"), 
              x = ~Sepal.Width, y = ~Petal.Width, color = ~Species) %>% 
  add_markers() %>% 
  layout(title = "virginica")

# 拼接子图实现分面,共享Y轴保持刻度一致
subplot(p1, p2, p3, nrows = 1, shareY = TRUE, titleX = TRUE, titleY = TRUE)

注意事项

  • 所有子图属于同一个共享数据组,滑块筛选操作会同步作用于三个分面,不会出现筛选异常
  • 无需对原始SharedData做结构修改,规避了do函数不兼容的问题
  • 可调整subplot的nrows参数切换横/纵向分面布局,修改shareX/shareY参数自定义坐标轴共享规则

内容的提问来源于stack exchange,提问作者Amit Kohli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:06:04