Vizualizează datele într-un grafic
Reține că graficele sunt obiecte de tip output și, ca atare, se adaugă într-o aplicație Shiny folosind funcțiile plotOutput() + renderPlot(). Funcția de output se adaugă în UI pentru a stabili unde va fi afișat graficul, iar funcția de randare din codul serverului este responsabilă de generarea acestuia.
Sarcina ta este să adaugi un grafic al PIB-ului pe cap de locuitor față de speranța de viață în aplicație. Datele folosite în grafic trebuie să fie aceleași cu cele afișate în tabel, adică graficul ar trebui să afișeze doar înregistrările care corespund filtrelor selectate. Codul din interiorul funcției renderPlot() nu are acces la variabilele definite în renderTable(), așa că va trebui să copiezi și să reutilizezi același cod. Ulterior vom învăța cum să evităm această duplicare.
Acest exercițiu face parte din cursul
Studii de caz: Construirea aplicațiilor web cu Shiny în R
Instrucțiuni pentru exercițiu
- Adaugă un placeholder pentru output-ul graficului în UI, cu ID-ul "plot".
- În server, folosește funcția de randare corespunzătoare pentru a crea graficul (linia 30).
- Reutilizează același cod de filtrare a datelor folosit de tabelul de output pentru datele graficului (linia 32).
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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)