Выберите кривую (-ы) для R-графика на основе ввода флажка для блестящего

У меня есть график с множеством линий, которые я добавил вручную с помощью add_trace. Я хотел бы иметь возможность выбирать, какие линии появляются на графике, устанавливая флажки. Я также хотел бы, чтобы флажки представляли несколько переменных. Например, установка флажка "Выбор A" возвращает строки для varone и vartwo.

Кажется, я все перепробовал, но безуспешно. Я пробовал различные реактивные функции, но не смог заставить их работать, так как мои переменные находятся в столбцах, и каждая трассировка выбирает отдельный столбец, поэтому я не включил реактивность в приведенный ниже код, потому что я не могу заставить его Работа. Помощь будет принята с благодарностью!!

library(shiny)
library(plotly)
library(shinythemes)

 mydataset <-data.frame( date  = c("12/01/2016", "12/02/2016",  "12/03/2016"),
              varone = c(60, 65, 80),
              vartwo = c(90, 45, 100),
              varthree = c(15, 120,201))


 ui <- shinyUI(
  navbarPage(theme=shinytheme("journal"), "My Dashboard",
  tabPanel("Data",
    fluidPage(
      fluidRow(
        column(2, dateRangeInput("daterange1", label = h5("Date Range:"),
                                 start = "2001-01-01",
                                 end   = "2010-12-31"),
               br(),
               checkboxGroupInput("mydataset", label = h5("Variables:"),
                                  c("Choice A" = "varone",
                                    "Choice B" = "vartwo",
                                    "Choice C" = "varthree"))),#close column
        column(10, plotlyOutput("plot"))
      )))))


 server <- function(input, output) { 
 output$plot <- renderPlotly({
 plot_ly(x = mydataset$date, y = mydataset$varone, name = 'varone', type = 'scatter', mode = 'lines') %>%
  add_trace(x = mydataset$date, y = mydataset$vartwo, name = 'vartwo', mode = 'lines+markers')%>%
  add_trace(x = mydataset$date, y = mydataset$varthree, name = 'varthree', mode = 'lines+markers')
  })}

 shinyApp(ui ,server)

person tika    schedule 22.01.2017    source источник
comment
возможно, это stackoverflow.com/questions/36799857/ может помочь   -  person MLavoie    schedule 23.01.2017
comment
выберите, какие линии появятся на графике, установив флажки, если они уже реализованы на графике. Просто щелкните / уберите в легенде строку, которую вы хотите отобразить.   -  person MLavoie    schedule 23.01.2017
comment
Спасибо за ваши ответы. Я знаю, что легенда может выделять и отменять выделение следов. У меня так много переменных, что я хочу сгруппировать их по флажку. Вот почему предыдущий ответ тоже не так полезен.   -  person tika    schedule 23.01.2017
comment
возможно, вы могли бы отредактировать свой пост, чтобы отразить это требование   -  person MLavoie    schedule 23.01.2017


Ответы (1)


Хотели бы вы, чтобы это работало?

Но сначала я предлагаю вам изменить форму набора данных с широкого на длинный. Для каждого по вашему выбору вы сможете получить их по группам.

library(reshape2)

mydataset_long <- melt(mydataset, id.vars=c("date"))

ui <- shinyUI(
  navbarPage(theme=shinytheme("journal"), "My Dashboard",
             tabPanel("Data",
                      fluidPage(
                        fluidRow(
                          column(2, dateRangeInput("daterange1", label = h5("Date Range:"),
                                                   start = "2001-01-01",
                                                   end   = "2010-12-31"),
                                 br(),
                                 selectInput("mychoice", "Variables",
                                                    c("Choice A",
                                                      "Choice B",
                                                      "Choice C"))),#close column
                          column(10, plotlyOutput("myPlot"))
                        )))))


server <- function(input, output) { 
  output$myPlot = renderPlotly({

    if(identical(input$mychoice, "Choice A")) {
      mydataset_long_s <- mydataset_long %>% filter(variable == "varone")
      plot_ly(data=mydataset_long_s, x=~as.Date(date), y=~value, line = list(shape="linear"))
    } else {
      if(identical(input$mychoice, "Choice B")) {
        mydataset_long_s <- mydataset_long %>% filter(variable == "vartwo")
      plot_ly(data=mydataset_long_s, x=~as.Date(date), y=~value, line = list(shape="linear"))
    }  else {
        mydataset_long_s <- mydataset_long %>% filter(variable == "varthree")
        plot_ly(data=mydataset_long_s, x=~as.Date(date), y=~value, line = list(shape="linear"))
      }
    } 

})
  }

shinyApp(ui, server)
person MLavoie    schedule 23.01.2017
comment
Спасибо! Очень-очень полезно! Чтобы уточнить: если бы я хотел иметь график Варианта А как varone, так и vartwo, как я мог бы добавить vartwo к аргументу filter ()? - person tika; 24.01.2017
comment
должно работать что-то вроде этого: filter (variable == varone & variable == vartwo) или filter (variable == varone | variable == vartwo) - person MLavoie; 24.01.2017