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
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)