Die Daten plotten
Erinnere dich: Plots sind Output-Objekte und werden daher mit den Funktionen plotOutput() + renderPlot() in eine Shiny-App eingebunden. Die Output-Funktion kommt in die UI und legt fest, wo der Plot erscheint, und die Render-Funktion im Server-Code ist für die Erstellung des Plots zuständig.
Deine Aufgabe ist es, einen Plot von BIP pro Kopf vs. Lebenserwartung zur App hinzuzufügen. Die Daten im Plot sollen dieselben sein wie in der Tabelle; das heißt, der Plot soll nur Einträge zeigen, die zu den Eingabefiltern passen. Der Code innerhalb von renderPlot() hat keinen Zugriff auf Variablen, die in renderTable() definiert wurden, daher musst du denselben Code tatsächlich kopieren und wiederverwenden. Später lernst du, wie sich diese Duplizierung vermeiden lässt.
Diese Übung ist Teil des Kurses
Fallstudien: Webanwendungen mit Shiny in R erstellen
Anleitung zur Übung
- Füge in der UI einen Platzhalter für einen Plot-Output mit der ID "plot" hinzu.
- Verwende im Server die passende Render-Funktion, um den Plot zu erstellen (Zeile 30).
- Nutze für die Plot-Daten denselben Datenfilter-Code wie für die Output-Tabelle (Zeile 32).
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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)