I'm trying to build an app that will let the user plot multiple lines on a single graph. My data contains tourism data on multiple country by years.
> 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
Now I'm trying to plot the data with the 'years' column as the x-axis and the other columns as the y-axis.
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)
The problem is, if I try to plot more than one country at a time, I get the following error: "Aesthetics must be either length 1 or the same as the data (21): x, y, colour".
While searching, I figured that I'm missing an observe or reactive part, but I just cant figure out how to add it.
Any help would be appreciated.
Melt your data set to long form and then subset to plot. Try the following (no sample data provided so I'm pretty sure this will work but not tested):
#when loading server.R
library(reshape2)
And then:
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")
})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With