Aan de slagBegin gratis

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

Bekijk cursus

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)
Code bewerken en uitvoeren