如何在R Shiny仪表板中打开和关闭行

时间:2018-07-30 18:44:27

标签: r shiny

我正在使用R Shiny中的Plot_ly包绘制图形。现在,我正在创建一个带有许多线条的图形,我想知道用户是否可以使用复选框输入来打开和关闭这些线条。

这是我的服务器端代码的示例:

output$site_filter <- renderUI({
    selectInput("site_filter", "Sites"
                sort(unique(site_list$sites), decreasing = FALSE))
  })

output$plots <- renderPlotly({

forecast_detail <- forecast[forecast$site == input$site_filter,]

actual_detail <- actual[actual$site == input$site_filter,]

p <- plot_ly() %>%
      add_lines(x = forecast_detail$date, y = forecast_detail$total,
                name = 'Forecast', line = list(color = 'purple')) %>%
      add_lines(x = actual_detail$date, y = actual_detail$total,
                name = 'Actual', line = list(color = 'blue'))

})

对于我的用户界面,我创建了如下复选框:

fluidRow(checkboxInput("Actuals", "Actual Line", value = TRUE))

有没有一种方法可以使用此复选框输入来切换实际行的开和关?我一直在尝试在add_lines命令之前使用if语句,但收到一条错误消息,指出它不合逻辑。

1 个答案:

答案 0 :(得分:1)

您可以存储第一组行,并根据复选框触发的条件添加第二组。没有可复制的示例,很难找到一个可行的解决方案,但类似的事情应该可以完成:

output$plots <- renderPlotly({

  forecast_detail <- forecast[forecast$site == input$site_filter,]
  actual_detail <- actual[actual$site == input$site_filter,]

  p <- plot_ly() %>%
    add_lines(
      x = forecast_detail$date, 
      y = forecast_detail$total,
      name = 'Forecast', 
      line = list(color = 'purple')
    )

  if(!is.null(input$Actuals)) {
    p <- p %>%
      add_lines(
        x = actual_detail$date, 
        y = actual_detail$total,
        name = 'Actual', 
        line = list(color = 'blue')
      )
  }

  return(p)

})