Shiny not displaying my ggplot as I'd expect
ggplot2, r, shiny
Solution
There are two issues here.
First, you shouldn't subset in `aes` -- it expects column names. Instead, subset the data.frame that you provide to `ggplot` (thanks to @Roland from R chat)
Second, you must explicitly `print` your ggplot object in your shiny app.
Try this:
p <- ggplot(finalDat[finalDat$City == input$city,], aes(x = Year, y = Value))
p <- p + geom_point()
print(p)
Problem
What's keeping my little Shiny app from displaying my ggplot? When I replace the code in renderPlot() with an example using the base plot function it comes together. I'm using RStudio, R v3.0.1 on Windows Vista, outputting to a Chrome browser. ui.r ``` library(ggplot2) cities <- c("Anchorage","Fairbanks","Juenau","Wasilla","Homer") years <- 2003:2013 Table <- "Capital Assets" Account <- c("Land", "Art", "Buildings", "Equipment") dat <- data.frame(City = sort(rep(cities, length(years))), Year = rep(years,length(cities)), Table) sampleDat <- rbind(data.frame(dat,Acount = Account[1]), data.frame(dat, Acount = Account[2]), data.frame(dat, Acount = Account[3]), data.frame(dat, Acount = Account[4])) finalDat <- data.frame(sampleDat, Value = runif(length(sampleDat[,1]), 1000,10000) ) shinyUI(pageWithSidebar( headerPanel("CAFR Explorer"), selectInput("city","City", as.list(levels(finalDat$City)), selected = NULL, multiple = FALSE), mainPanel( h3(textOutput("caption")), plotOutput("CAFRplot") ))) ``` server.r ``` library(shiny) library(ggplot2) cities <- c("Anchorage","Fairbanks","Juenau","Wasilla","Homer") years <- 2003:2013 Table <- "Capital Assets" Account <- c("Land", "Art", "Buildings", "Equipment") dat <- data.frame(City = sort(rep(cities, length(years))), Year = rep(years,length(cities)), Table) sampleDat <- rbind(data.frame(dat,Acount = Account[1]), data.frame(dat, Acount = Account[2]), data.frame(dat, Acount = Account[3]), data.frame(dat, Acount = Account[4])) finalDat <- data.frame(sampleDat, Value = runif(length(sampleDat[,1]), 1000,10000) ) shinyServer(function(input, output) { formulaText <- reactive({ paste(input$city) }) output$caption <- renderText({ formulaText() }) output$CAFRplot <- renderPlot({ ## this one isn't working. ggplot(finalDat, aes(x = finalDat[which(finalDat$City == input$city),2], y = finalDat[which(finalDat$City == input$city),5])) + geom_point() ## this one is working #plot(finalDat[which(finalDat$City == input$city),2], y = finalDat[which(finalDat$City == input$city),5]) }) }) ```