I am uploading csv file into a via shiny and trying to draw ggplot from the selected columns.
output$plot = renderPlot( { df <- data_set() gp <- NULL if (!is.null(df)){ xv <- input$xaxisGrp yv <- input$yaxisGrp if (!is.null(xv) & !is.null(yv)){ if (sum(xv %in% names(df))>0){ # supress error when changing files mdf <- melt(df,id.vars=xv,measure.vars=yv) gp <- ggplot(data=mdf) + geom_point(aes_string(x=xv,y="value",color="variable"))+ geom_smooth(method="lm")+ theme(axis.text.x=element_text(angle=45, hjust=1))+ theme_hc() + scale_colour_hc()+theme(legend.title=element_blank()) } } } return(gp) }
I can create the chart but when I try to add
+geom_smooth(method="lm")
I am not getting the lm line any ideas what might be happening?
given a data set like this:
dput(df) structure(list(load = c(1L, 18L, 36L, 72L, 108L, 144L, 216L), throughput = c(64.9, 995.9, 1652.4, 1853.2, 1828.9, 1775, 1702.2)), .Names = c("load", "throughput"), class = "data.frame", row.names = c(NA, -7L))
I tried to do:
plot(xy~yv, data=df)
I don't see anything. But to test it, when I do the following, it works. I was not able to find out what the problem is. Again, I am uploading a file to shiny app to plot and create models. Any ideas?
plot(mtcars$mpg~mtcars$cyl) ##this works
1 Answers
Answers 1
Your problem is minor: geom_smooth()
does not reference any data. Set the aesthetics aes()
universally inside ggplot()
instead of just in geom_point()
. The reproducible example below simply cut-and-pastes the line to the correct location.
First, we'll write mtcars into a csv file to load into shiny:
write.table(mtcars, "c://path//to//your//file.csv", row.names = TRUE, sep=",")
Second, run this code:
library(shiny); library(ggplot2); library(reshape2) shinyApp( ui = fluidPage( sidebarLayout( sidebarPanel( fileInput("inputFile", "Browse for file"), #Upload button #After file is uploaded, read the columns in the server function, # and create a responsive dropdown menu for plotting the variables uiOutput("plot.params") #Responsive x and y dropdown menu ), mainPanel( plotOutput("plot") ) ) ), server = function(input, output, session) { #Read in the uploaded data file and create a reactive variable called data_set data_set <- reactive({if(is.null(input$inputFile)) return(NULL) read.csv(input$inputFile$datapath, header = TRUE, sep=",") }) #Create a (reactive) dropdown menu for selecting X and Y output$plot.params <- renderUI({ list( fluidRow(selectInput(inputId = "xaxisGrp", label = "X", choices = names(data_set() )) ), fluidRow(selectInput(inputId = "yaxisGrp", label = "Y", choices = names(data_set() )) ) )}) #Create a plot- copied from OP with minor edit to ggplot() output$plot = renderPlot( { df <- data_set() gp <- NULL if (!is.null(df)){ xv <- input$xaxisGrp #from the reactive ui selecInput yv <- input$yaxisGrp #from the reactive ui selecInput if (!is.null(xv) & !is.null(yv)){ if (sum(xv %in% names(df))>0){ # supress error when changing files mdf <- melt(df,id.vars=xv,measure.vars=yv) gp <- ggplot(data=mdf, aes_string(x=xv,y="value",color="variable")) + geom_point()+ #aes() moved from here into ggplot() geom_smooth(method="lm") } } } return(gp) } ) } )
0 comments:
Post a Comment