Добавление нескольких реактивных geom_lines к блестящей фигуре - PullRequest
0 голосов
/ 09 ноября 2018

Я бы хотел включить реактивные выходные данные двух наборов данных в качестве разных geom_lines на одном и том же рисунке ggplotly. Код выполняется, как и ожидалось, когда в качестве geom_line включен только один реактивный data.frame. Почему не два?

ui <- fluidPage(


   sidebarLayout(

  selectInput("Var1",
     label = "Variable", #DATA CHOICE 1
     selected = 10,
     choices = c(10:100)),

   selectInput("Var1",
               label = "Variable2", #DATA CHOICE 2
               selected = 10,
               choices = c(10:100))

      # Show a plot of the generated distribution

   ),
  mainPanel(
    plotlyOutput('plot') #Draw figure
  )
)


server <- function(input, output) {

  out <- reactive({

    data.frame(x = rnorm(input$Var1), #Build data set 1
               y  = 1:input$Var1)

  })

  out2 <- reactive({
    data.frame(x = rnorm(input$Var2), #Build data set 2
               y  = 1:input$Var2)
  })

  output$plot <- renderPlotly({
    p <- ggplot() +
      geom_line(data = out(), aes(x = x, y = y)) #Add both data sets in one ggplot
      geom_line(data = out2(), aes(x = x, y = y), color = "red")

    ggplotly(p)
  })

}

# Run the application 
shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 09 ноября 2018

Когда вы помещаете данные в длинный формат и присваиваете каждой группе идентификатор группы, кажется, что это работает. Обратите внимание, что вы должны иметь возможность изменить sliderInput обратно на selectInput - это была одна из записей, которые я переключал во время тестирования, но выбор виджета пользовательского интерфейса не должен иметь значения.

Это работает - код может быть упрощен внутри реактива отсюда:

library(plotly)

  ui <- fluidPage(

  sidebarLayout(
     sliderInput("Var1",
            label = "Variable", #DATA CHOICE 1
            min=10, max=100, value=10),
     sliderInput("Var2",
            label = "Variable2", #DATA CHOICE 2
            min=10, max=100, value=10),
  ),
  mainPanel(
     plotlyOutput('plot') #Draw figure
  )
)

   server <- function(input, output) {

   out <- reactive({
      x1 <- rnorm(input$Var1)
      y1 <- seq(1:input$Var1)
      x2 <- rnorm(input$Var2)
      y2 <- seq(1:input$Var2)
      xx <- c(x1,x2)
      yy <- c(y1,y2)
      gg <- c( rep(1,length(y1)), rep(2,length(y2)) )
      df <- data.frame(cbind(xx,yy,gg))
      df
   })

   output$plot <- renderPlotly({
   p <- ggplot() +
       geom_line(data=out(), aes(x = xx, y = yy, group=gg, colour=gg))
   ggplotly(p)
   })

 }

shinyApp(ui = ui, server = server)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...