2016-03-31 22 views
-3

Csv dosyasını parlak bir şekilde yüklüyorum ve seçilen sütunlardan ggplot çizmeye çalışıyorum.ggplot2 içinde doğrusal çizgi çizilemiyor

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

Ben grafiği oluşturabilirsiniz ama denediğimde herhangi bir fikir ne oluyor olabilir lm hattını almıyorum

+geom_smooth(method="lm") 

eklenir?

böyle bir veri kümesi verilen:

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

yapmaya çalıştığım:

plot(xy~yv, data=df) 

Hiçbir şey görmüyorum. Ama bunu test etmek için, aşağıdakileri yaptığımda işe yarıyor. Sorunun ne olduğunu öğrenemedim. Yine, modelleri çizmek ve oluşturmak için parlak uygulamaya bir dosya yüklüyorum. Herhangi bir fikir?

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

sen yararlanarak ise aes_string yerine x = "xv" yi yapmaz mısın? Ve sadece başka bir şeyi teyit etmek için, 'method =" auto "' nin hiçbir fark yaratmadığını anladım, arsa göstermiyor mu? En son şey, eğer her iki jeom aynı şeyi kullanırsa, aes_string ilk 'ggplot' çağrısında verilmemelidir? – Konrad

+0

Ben deneyin: ggplot (data = mdf, aes_string (x = "xv", y = "değer", renk = "değişken")) + geom_point() + geom_smooth (method = "auto") ', sadece – Konrad

+0

@Konrad farkını kontrol ettim, denedim, fark yok, geom_smooth çalışmasını alamıyorum – user1471980

cevap

11

Sorununuzu minör: geom_smooth() hiçbir veri referansı değil. Sadece geom_point() yerine aes() estetiğini ggplot() içine yerleştirin. Aşağıdaki tekrarlanabilir örnek aşağıdaki satırı doğru yere keser ve yapıştırır.

İlk olarak, parlak içine yüklemek için bir csv dosyasına mtcars yazacağım:

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

İkinci çalıştırmak bu kodu:

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