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