CommencerCommencer gratuitement

Placer différents résultats sur des onglets distincts

Les onglets sont utiles lorsque vous avez trop de contenu et que vous souhaitez le répartir. Pour créer un onglet, il suffit d’englober des éléments d’interface dans la fonction tabPanel() et de fournir un titre à l’onglet via l’argument title.

Pour que les onglets apparaissent dans l’interface, les panneaux d’onglets doivent être regroupés dans un « conteneur » d’onglets, en englobant tous les panneaux d’onglets dans tabsetPanel().

Votre tâche consiste à ajouter des onglets à l’application Shiny, de sorte que les entrées et le bouton de téléchargement se trouvent dans un onglet, le graphique dans un autre, et la table dans un troisième. Comme il s’agit uniquement d’un changement visuel, toutes les modifications de code doivent être effectuées uniquement dans la partie UI.

Cet exercice fait partie du cours

Études de cas : créer des applications web avec Shiny en R

Afficher le cours

Instructions

  • Utilisez la fonction tabsetPanel() pour créer un conteneur pour trois panneaux d’onglets :
    • Un premier onglet pour les entrées, et nommez l’onglet "Inputs".
    • Un deuxième onglet qui affiche le graphique, et nommez l’onglet "Plot" (ligne 16).
    • Un troisième onglet qui affiche la table, et nommez l’onglet "Table" (ligne 21).

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

ui <- fluidPage(
    h1("Gapminder"),
    # Create a container for tab panels
    ___(
        # Create an "Inputs" tab
        tabPanel(
            title = ___,
            sliderInput(inputId = "life", label = "Life expectancy",
                        min = 0, max = 120,
                        value = c(30, 50)),
            selectInput("continent", "Continent",
                        choices = c("All", levels(gapminder$continent))),
            downloadButton("download_data")
        ),
        # Create a "Plot" tab
        ___(
            title = "Plot",
            plotOutput("plot")
        ),
        # Create "Table" tab
        ___(
            title = ___,
            DT::dataTableOutput("table")
        )
    )
)

server <- function(input, output) {
  filtered_data <- reactive({
    data <- gapminder
    data <- subset(
      data,
      lifeExp >= input$life[1] & lifeExp <= input$life[2]
    )
    if (input$continent != "All") {
      data <- subset(
        data,
        continent == input$continent
      )
    }
    data
  })
  
  output$table <- DT::renderDataTable({
    data <- filtered_data()
    data
  })

  output$download_data <- downloadHandler(
    filename = "gapminder_data.csv",
    content = function(file) {
      data <- filtered_data()
      write.csv(data, file, row.names = FALSE)
    }
  )

  output$plot <- renderPlot({
    data <- filtered_data()
    ggplot(data, aes(gdpPercap, lifeExp)) +
      geom_point() +
      scale_x_log10()
  })
}

shinyApp(ui, server)
Modifier et exécuter le code