2017-07-24 264 views
1

我試圖構建一個應用程序,讓用戶在單個圖上繪製多條線。我的數據包含多年來在多個國家的旅遊數據。使用Shiny和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 

現在我試圖繪製數據,以'年份'列作爲x軸,其他列作爲y軸。

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) 

的問題是,如果我嘗試一次繪製一個以上的國家,我得到以下錯誤:「美學必須是長度爲1或相同的數據(21):X,Y ,顏色「。

在搜索過程中,我想我錯過了觀察或反應部分,但我不知道如何添加它。

任何幫助,將不勝感激。

回答

3

將您的數據集融合爲長格式,然後將其子集映射到繪圖。請嘗試以下(不提供樣本數據,所以我敢肯定這會工作,但沒有測試):

#when loading server.R 
library(reshape2) 

然後:

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

編輯,做了一個小錯字。 – Zach

+1

正在鍵入類似的東西:) –

+0

您的解決方案非常完美,非常感謝! –