2017-07-24 4 views
1

Ich versuche, eine App zu erstellen, mit der der Benutzer mehrere Linien in einem einzigen Diagramm plotten kann. Meine Daten enthalten Tourismusdaten zu mehreren Ländern nach Jahren.Plotten mehrerer Linien in einem einzigen Diagramm mit Shiny und ggplot2

> head(tourism) 
    years Bulgaria Czech Republic Denmark Poland Sweden Norway 
1 1995 5437.963  10274.98 9651.070 5523.500 7860.659 7294.971 
2 1996 5921.961  13640.53 10810.187 5594.191 7716.620 7236.490 
3 1997 5476.931  14932.49 10918.596 7579.637 7658.900 7243.111 
4 1998 5197.050  16218.00 10287.564 7229.771 8029.087 7868.735 
5 1999 4382.405  16125.00 9965.684 5644.924 8600.785 7814.983 
6 2000 5170.091  15597.09 10005.887 6891.283 8654.086 7468.899 

Jetzt versuche ich, die Daten mit der ‚Jahr‘ Spalte als die x-Achse und den anderen Spalten als die y-Achse plotten.

ui = fluidPage(
    titlePanel("Tourism"), 
    sidebarLayout(
    sidebarPanel(
     selectizeInput("cnt", 
        "Select Country:", 
        choices = c("Bulgaria", 
           "Czech Republic", 
           "Denmark", 
           "Poland", 
           "Sweden", 
           "Norway"), 
        selected = "Bulgaria", 
        multiple = TRUE 
    ) 
    ), 
    mainPanel(
     plotOutput("plot") 
    ) 
) 
) 


server = function(input, output) { 

    output$plot = renderPlot({ 
    ggplot(tourism) + 
     geom_line(mapping = aes(x = years, y = tourism[,input$cnt], colour = input$cnt)) + 
     labs (x = "Years", y = "Nights spent per 1000", title = "Tourism") + 
     scale_colour_discrete(name = "Country") 
    }) 

} 

shinyApp(ui = ui, server) 

Das Problem ist, wenn ich zu einem Zeitpunkt mehr als ein Land zu zeichnen versuchen, ich die folgenden Fehlermeldung erhalten: „Ästhetik muss entweder Länge 1 oder die gleiche wie die Daten sein (21): x, y , Farbe".

Während der Suche habe ich festgestellt, dass ich einen beobachtenden oder reaktiven Teil vermisse, aber ich kann nicht herausfinden, wie man ihn hinzufügt.

Jede Hilfe wäre willkommen.

Antwort

3

Schmelzen Sie Ihren Datensatz auf lange Form und dann Teilmenge zu plotten. Versuchen Sie, die folgenden (keine Probendaten zur Verfügung gestellt, so bin ich ziemlich sicher, dass dies funktionieren wird, aber nicht getestet):

#when loading server.R 
library(reshape2) 

Und dann:

output$plot = renderPlot({ 
    plot.data <- melt(tourism, id.vars = 'years') 
    #not sure if input$cnt is a list or a vector 
    #may need to manipulate that before passing 
    plot.data <- plot.data[plot.data$variable %in% input$cnt, ] 
    ggplot(plot.data) + 
     geom_line(mapping = aes(x = years, y = value, colour = variable)) + 
     labs (x = "Years", y = "Nights spent per 1000", title = "Tourism") + 
     scale_colour_discrete(name = "Country") 
    }) 
+0

Edited, einen kleinen Tippfehler gemacht. – Zach

+1

Hat etwas ähnliches eingegeben :) –

+0

Ihre Lösung hat perfekt funktioniert, vielen Dank! –

Verwandte Themen