Tracer les données
Rappelez-vous que les graphiques sont des objets de sortie ; on les ajoute donc à une application Shiny en utilisant les fonctions plotOutput() + renderPlot(). La fonction de sortie est ajoutée à l’UI pour indiquer où placer le graphique, et la fonction de rendu dans le serveur est chargée de générer le graphique.
Votre tâche consiste à ajouter à l’application un graphique du PIB par habitant en fonction de l’espérance de vie. Les données utilisées pour le graphique doivent être les mêmes que celles affichées dans le tableau ; autrement dit, le graphique ne doit montrer que les enregistrements qui correspondent aux filtres saisis. Le code à l’intérieur de renderPlot() n’a pas accès aux variables définies dans renderTable(), vous devrez donc littéralement copier et réutiliser le même code. Plus tard, nous verrons comment éviter cette duplication.
Cet exercice fait partie du cours
Études de cas : créer des applications web avec Shiny en R
Instructions
- Ajoutez à l’UI un emplacement réservé pour une sortie de graphique avec l’ID "plot".
- Dans le serveur, utilisez la fonction de rendu appropriée pour créer le graphique (ligne 30).
- Réutilisez pour les données du graphique le même code de filtrage que celui utilisé par le tableau de sortie (ligne 32).
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
ui <- fluidPage(
h1("Gapminder"),
sliderInput(inputId = "life", label = "Life expectancy",
min = 0, max = 120,
value = c(30, 50)),
selectInput("continent", "Continent",
choices = c("All", levels(gapminder$continent))),
# Add a plot output
___(___),
tableOutput("table")
)
server <- function(input, output) {
output$table <- renderTable({
data <- gapminder
data <- subset(
data,
lifeExp >= input$life[1] & lifeExp <= input$life[2]
)
if (input$continent != "All") {
data <- subset(
data,
continent == input$continent
)
}
data
})
# Create the plot render function
output$plot <- ___({
# Use the same filtered data code that the table uses
data <- ___
___
___
ggplot(data, aes(gdpPercap, lifeExp)) +
geom_point() +
scale_x_log10()
})
}
shinyApp(ui, server)