IniziaInizia gratis

Rappresenta i dati

Ricorda che i grafici sono oggetti di output e, in quanto tali, si aggiungono a una app Shiny usando le funzioni plotOutput() + renderPlot(). La funzione di output si aggiunge alla UI per stabilire dove posizionare il grafico, mentre la funzione di render nel server è responsabile della sua generazione.

Il tuo compito è aggiungere all'app un grafico di PIL pro capite vs aspettativa di vita. I dati usati nel grafico devono essere gli stessi mostrati nella tabella; cioè, nel grafico devono comparire solo i record che corrispondono ai filtri di input. Il codice dentro renderPlot() non ha accesso a nessuna variabile definita dentro renderTable(), quindi dovrai letteralmente copiare e riutilizzare lo stesso codice. Più avanti vedremo come evitare questa duplicazione.

Questo esercizio fa parte del corso

Casi di studio: creare applicazioni web con Shiny in R

Visualizza il corso

Istruzioni dell'esercizio

  • Aggiungi alla UI un segnaposto per l'output del grafico con ID "plot".
  • Nel server, usa la funzione di render appropriata per creare il grafico (riga 30).
  • Riutilizza lo stesso codice di filtraggio dei dati che usa la tabella di output per i dati del grafico (riga 32).

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

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)
Modifica ed esegui il codice