Maak een plot van de data
Onthoud dat plots outputobjecten zijn en daarom worden toegevoegd aan een Shiny-app met de functies plotOutput() + renderPlot(). De outputfunctie wordt aan de UI toegevoegd om te bepalen waar de plot komt, en de renderfunctie in de servercode is verantwoordelijk voor het genereren van de plot.
Jouw taak is om een plot van bbp per hoofd van de bevolking tegen levensverwachting aan de app toe te voegen. De data in de plot moet dezelfde zijn als de data die in de tabel wordt getoond; met andere woorden, de plot mag alleen records tonen die overeenkomen met de invoerfilters. De code binnen renderPlot() heeft geen toegang tot variabelen die binnen renderTable() zijn gedefinieerd, dus je zult letterlijk dezelfde code moeten kopiëren en hergebruiken. Later leren we hoe je deze duplicatie kunt vermijden.
Deze oefening maakt deel uit van de cursus
Casestudies: webapplicaties bouwen met Shiny in R
Oefeninstructies
- Voeg in de UI een placeholder toe voor een plotoutput met als ID "plot".
- Gebruik in de server de juiste renderfunctie om de plot te maken (regel 30).
- Hergebruik dezelfde datafiltercode die de outputtabel gebruikt voor de plotdata (regel 32).
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
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)