Использование условной панели в Shiny для одновременной визуализации графиков - PullRequest
0 голосов
/ 24 сентября 2018

Это воспроизводимый пример.Я пытаюсь понять, используя функцию условной панели под блестящей.

Как настроить код таким образом, чтобы при установке обоих флажков график и изображение отображались вместе?(с графиком сверху и изображением внизу на главной панели)

library(shiny)

ui = fluidPage(
  titlePanel("Plot or Example?"),
  sidebarLayout(
    sidebarPanel(
      checkboxGroupInput("my_choices", "Example or Plot",choices = c("Plot", "Example"), selected = 1),width=2),
    mainPanel(
      conditionalPanel(
        condition = "input.my_choices == 'Plot'",
        plotOutput('my_test1')
      ),
      conditionalPanel(
        condition = "input.my_choices == 'Example'",
        uiOutput("my_test2")
      )
    )
  )
)

server = function(input, output) {

  output$my_test1 <- renderPlot({plot(runif(100))})
  output$my_test2 <- renderUI({
    images <- c("http://www.i2symbol.com/images/abc-123/o/white_smiling_face_u263A_icon_256x256.png")
    tags$img(src= images)
  })
}

1 Ответ

0 голосов
/ 24 сентября 2018

Есть несколько вещей, которые нужно сделать.

Во-первых, ваш selected аргумент checkboxGroupInput должен соответствовать одному из вариантов.Здесь я изменил его на "Plot".

Во-вторых, я использовал "input.my_choices.includes('Example') && input.my_choices.includes('Plot')" в качестве условия, когда выбраны оба.

В-третьих, Shiny не позволяет использовать один и тот же выход болеечем один раз.Чтобы обойти это, я сделал дубликаты выходов в коде server и сослался на дублированные имена в условной панели для условия, в котором установлены оба флажка.

library(shiny)

ui = fluidPage(
  titlePanel("Plot or Example?"),
      sidebarLayout(
    sidebarPanel(
      checkboxGroupInput("my_choices", "Example or Plot",choices = c("Plot", "Example"), selected = "Plot"),width=2),
    mainPanel(
      conditionalPanel(
        condition = "input.my_choices == 'Plot'",
        plotOutput("my_test1")
      ),
      conditionalPanel(
        condition = "input.my_choices == 'Example'",
        uiOutput("my_test2")
      ),
      conditionalPanel(
        condition = "input.my_choices.includes('Example') && input.my_choices.includes('Plot')",
        plotOutput("my_test1a"),
        uiOutput("my_test2a")
      )
    )
  )
)

server = function(input, output) {

  output$my_test1 <- output$my_test1a <- renderPlot({plot(runif(100))})
  output$my_test2 <- output$my_test2a <- renderUI({
    images <- c("http://www.i2symbol.com/images/abc-123/o/white_smiling_face_u263A_icon_256x256.png")
    tags$img(src= images)
  })

}

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