Search code examples
ggplot2extractnasmoothingcurve

Extract ggplot smoothing function and save in dataframe


I am trying to extract my smoothing function from a ggplot and save it as dataframe (hourly datapoints) Plot shown here.

What I have tried:

I have already tried different interpolation techniques, but the results are not satisfying.

  • Linear interpolation causes a zic-zac pattern.
  • Na_spline causes a weird curved pattern.

The real data behaves more closely to the geom_smoothing of ggplot. I have tried to reproduce it with the following functions:

loess.data <- stats::loess(Hallwil2018_2019$Avgstemp~as.numeric(Hallwil2018_2019$datetime), span = 0.5)
loess.predict <- predict(loess.data, se = T)
  • But it creates a list that misses the NA values and is much shorter.

Solution

  • You can pass a newdata argument to predict() to get it to predict a value for every time period you give it. For example (from randomly generated data):

    df <- data.frame(date = sample(seq(as.Date('2021/01/01'), 
                                       as.Date('2022/01/01'), 
                                       by="day"), 40),
               var = rnorm(40, 100, 10))
    
    
    mod <- loess(df$var ~ as.numeric(df$date), span = 0.5)
    
    predict(mod, newdata = seq(as.Date('2021/01/01'), as.Date('2022/01/01'), by="day"))