CommencezCommencez gratuitement

Placer différents résultats sur différents onglets

Les onglets sont pratiques 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 à l'aide de l'argument title.

Pour que les onglets apparaissent dans l'interface, les panneaux d'onglets doivent être regroupés dans un « contenant » d'onglets, en enveloppant tous les panneaux avec tabsetPanel().

Votre tâche consiste à ajouter des onglets à l'application Shiny, de sorte que les contrôles et le bouton de téléchargement soient dans un onglet, le graphique dans un autre, et le tableau dans un troisième. Comme il s'agit uniquement d'un changement visuel, toutes les modifications de code doivent être faites uniquement dans la partie UI.

Cette activité fait partie du cours

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

Voir le cours

Instructions de l’exercice

  • Utilisez la fonction tabsetPanel() pour créer un contenant pour trois panneaux d'onglets :
    • Un premier onglet pour les contrôles, 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 le tableau, et nommez l'onglet « Table » (ligne 21).

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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