下面是一个使用Crosstalk和Plotly来过滤直方图的示例代码。
首先,我们需要安装并加载所需的包:
install.packages("shiny")
install.packages("plotly")
install.packages("crosstalk")
library(shiny)
library(plotly)
library(crosstalk)
接下来,我们创建一个包含过滤器的直方图。我们使用mtcars
数据集,并创建两个直方图:一个显示汽车的马力,另一个显示汽车的排气量。
# 创建一个数据帧
data <- mtcars
# 创建Crosstalk过滤器
filter <- SharedData$new(data)
# 创建直方图
p1 <- plot_ly(filter, x = ~hp, type = "histogram") %>%
layout(title = "汽车马力分布")
p2 <- plot_ly(filter, x = ~disp, type = "histogram") %>%
layout(title = "汽车排气量分布")
# 将两个图形放在一起
subplot(p1, p2, nrows = 2, shareX = TRUE)
现在,我们需要在Shiny应用程序中使用这些图形。我们创建一个Shiny应用程序,并在其中使用Crosstalk过滤器。
# 创建Shiny应用程序
ui <- fluidPage(
# 创建一个Crosstalk过滤器
filter_select("filter", "过滤器", filter, multiple = TRUE),
# 创建一个输出区域来显示图形
plotlyOutput("plot")
)
server <- function(input, output) {
# 使用Crosstalk过滤器来过滤图形
filtered_data <- reactive({
filter$set_filter(hp %in% input$filter)
filter$get_data()
})
# 更新图形
output$plot <- renderPlotly({
plot_ly(filtered_data(), x = ~hp, type = "histogram") %>%
layout(title = "汽车马力分布")
})
}
shinyApp(ui, server)
这样,我们就创建了一个包含过滤器的直方图,并且可以通过Crosstalk来实现交互式过滤。