Linegraph 2
Die zweite Aufgabe beschäftigt sich ebenfalls mit der Erstellung eines Liniendiagramms. Mit dem Unterschied, dass nun 2 Linien gezeichnet werden.
Ziel ist es eine rote Linie für die Temperatur und eine Blaue Linie für den Wind auszugeben.
Die fertige Ausgabe soll wie folgt aussehen:
server.R
Bibliothek und Datensätze sind identisch zur ersten Aufgabe.
Da im Programm später die Tage und Monate geändert werden sollen werden hierfür Schieberegler in der ui erstellt. Um die dort eingegebenen Werte
verwenden zu können müssen sie in der server.R ausgelesen werden. Ähnlich wie in der Sprache HTML, dort werden Input Felder erstellt und anschließend anhand
des Labels kann der Inhalt des Feldes ausgelesen werden. Gleichfalls ist es mit der Auswahl zwischen Wind und Temperatur. Auch diese Abfrage muss in der
server.R definiert werden.
library(shiny)
library(ggplot2)
server <- function(input, output) {
data <- airquality[c('Wind', 'Temp', 'Month', 'Day')]
output$month <- renderUI({
sliderInput(inputId = 'month', label = 'Monat',
min = min(data['Month']), max = max(data['Month']), step = 1,
value = min(data['Month'])
)
})output$day <- renderUI({
sliderInput(inputId = 'day', label = 'Tag',
min = 1, max = max(data$Day[data$Month == input$month]), step = 1,
value = c(1, max(data$Day[data$Month == input$month]))
)
})# Anpassen der Achsen:
rV <- reactiveValues(
factor = 1,
summand = 0,
data = data
)observeEvent(c(input$month, input$day), {
data_tmp <- data[data$Month == input$month,][c(input$day[1]:input$day[2]),]
rV$factor <- (max(data_tmp$Temp) - min(data_tmp$Temp)) / (max(data_tmp$Wind) - min(data_tmp$Wind))
rV$summand <- (-min(data_tmp$Wind)) * rV$factor + min(data_tmp$Temp)
rV$data$Temp <- (data$Temp - rV$summand) / rV$factor
})output$lineGraph <- renderPlot({
p <- ggplot(rV$data[data$Month == input$month, ][c(input$day[1]:input$day[2]), ]) +
coord_cartesian() +
geom_line(aes(Day, Wind, colour = "Wind")) +
geom_line(aes(Day, Temp, colour = "Temperatur")) +
scale_x_discrete(name = "Tag") +
scale_y_continuous(name = "Wind",
sec.axis = sec_axis(trans = ~. * rV$factor + rV$summand, name = "Temperatur")) +
scale_colour_manual(name = "Legende", values = c("Wind" = 'blue', "Temperatur" = 'red'))
p
})}
ui.R
Die Benutzeroberfläche bleibt weitgehend gleich. Lediglich die Zeile htmlOutput('yAxis'), fällt weg.
Das bedeutet, dass die Auswahl zwischen Wind und Temperatur wegfällt.
ui <- fluidPage(
titlePanel("Demo 2_Linegraph"),
sidebarLayout(
sidebarPanel(
htmlOutput('month'),
htmlOutput('day')
),
mainPanel(
plotOutput('lineGraph')
)
))
app.R
Die app.R bleibt hier komplett identisch.
source('server.R', encoding = "UTF-8")
source('ui.R', encoding = "UTF-8")
shinyApp(ui = ui, server = server)
Hier könnt ihr den Quellcode ohne Kommentare zusammengefasst herunterladen:
Linegraph 2 als .txt
<< Zurück | >> Weiter |
<< Zurück zur Übersicht: Tutorium Grundlagen Statistik
CategoryTutorienFKITWS1819
Diese Seite wurde noch nicht kommentiert.