Переход по графикам в приложении Shiny - PullRequest
0 голосов
/ 29 августа 2018

В моем приложении Shiny я использую цикл for для создания разных графиков, и я бы хотел, чтобы пользователь мог пролистывать каждый из них. Как бы я достиг этого, так как в настоящее время он просто идет к финальному сюжету?

library(shiny)

server <- function(input, output, session) {

  # data
  v <- c(9,8,7,8,9,5,6,7,4,3)
  w <- c(3,4,2,3,3,3,2,3,4,5)
  x <- c(1,3,4,6,2,4,6,8,6,3)
  y <- c(4,5,2,4,2,1,2,5,7,8)
  z <- c(5,9,8,6,4,6,8,9,6,7)
  df <- data.frame(v, w, x, y, z)

  # initial plot that will allow user to change parameters (haven't implemented yet)
  output$plot <- renderPlot(plot(df[[1]],df[[2]]))

  # wait until the button is triggered
  observeEvent(input$run, {
    for (i in 5){
      output$plot <- renderPlot(plot(df[[1]],df[[i]], main = i))
    }
    })
  }

ui <- fluidPage(
  actionButton("run", "Generate"),
  plotOutput("plot")
)

shinyApp(ui = ui, server = server)

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вам просто нужно использовать переменную, которая будет вести подсчет для каждого клика:

    library(shiny)
    server <- function(input, output, session) {          
      # data
      v <- c(9,8,7,8,9,5,6,7,4,3)
      w <- c(3,4,2,3,3,3,2,3,4,5)
      x <- c(1,3,4,6,2,4,6,8,6,3)
      y <- c(4,5,2,4,2,1,2,5,7,8)
      z <- c(5,9,8,6,4,6,8,9,6,7)
      df <- data.frame(v, w, x, y, z)

      # initial plot that will allow user to change parameters (haven't implemented yet)
      output$plot <- renderPlot(plot(df[[1]],df[[2]]))        

     count<-0   # This is the counter which keeps track on button count

      observeEvent(input$run, {
        count <<- count + 1 # Increment the counter by 1 when button is click
        if(count<6){
          # Draw the plot if count is less than 6
          output$plot <- renderPlot(plot(df[[1]],df[[count]],main = count))
        }
        else{
        # Reset the counter if it is more than 5
         count <- 0
        }             
      })
    }

    ui <- fluidPage(
      actionButton("run", "Generate"),
      plotOutput("plot")
    )

    shinyApp(ui = ui, server = server)
0 голосов
/ 29 августа 2018

Вместо использования цикла for вы можете попытаться напрямую, используя счетчик нажатий кнопки действия, т.е. введите $ run. Следующий код будет генерировать графики один за другим до тех пор, пока счетчик кликов не станет меньше или равен 5, а затем вернется к исходному график, как только количество кликов превысит 5. Вы можете изменить оператор else по своему желанию.

observeEvent(input$run, {
if(input$run <= 5){
  output$plot <- renderPlot(plot(df[[1]],df[[input$run]], main = input$run))
}else output$plot <- renderPlot(plot(df[[1]],df[[2]]))
})

Надеюсь, это может быть полезно

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