2016-03-31 6 views
-3

Я загружаю файл csv в прозрачный и пробовал рисовать ggplot из выбранных столбцов.Невозможно нарисовать линейную линию в ggplot2

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) 
} 

я могу создать диаграмму, но когда я пытаюсь добавить

+geom_smooth(method="lm") 

Я не получаю ую линию какие-либо идеи, что могут происходить?

дан набор данных, как это:

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)) 

Я попытался сделать:

plot(xy~yv, data=df) 

Я не вижу ничего. Но чтобы проверить его, когда я делаю следующее, он работает. Я не смог выяснить, в чем проблема. Опять же, я загружаю файл в блестящее приложение для создания и создания моделей. Есть идеи?

plot(mtcars$mpg~mtcars$cyl) ##this works 
+0

Если вы делаете использование 'aes_string' не лучше ли вы' x = "xv"? И просто для подтверждения другой вещи, я понимаю, что 'method =" auto "' не имеет значения, сюжет не отображается? Последнее, если обе геометрии используют один и тот же 'aes', не следует ли' aes_string' предоставлять в первом вызове 'ggplot'? – Konrad

+0

Я бы попробовал: 'ggplot (data = mdf, aes_string (x =" xv ", y =" value ", color =" variable ")) + geom_point() + geom_smooth (method =" auto ")', просто чтобы проверьте, не имеет значения – Konrad

+0

@ Konrad, я пробовал, без разницы, не могу получить работу geom_smooth – user1471980

ответ

11

Ваша проблема не актуальна: geom_smooth() не содержит никаких данных. Установите эстетику aes() универсально внутри ggplot(), а не только в geom_point(). Пример воспроизводимого ниже просто вырезает и вставляет строку в нужное место.

Во-первых, мы напишем mtcars в файл CSV для загрузки в блестящие:

write.table(mtcars, "c://path//to//your//file.csv", row.names = TRUE, sep=",") 

Во-вторых, запустить этот код:

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) 
     } 
    ) 
    } 
) 

shiny fileInput with reactiveUI and geom_smooth