R: Использование данных временного ряда с 'splinefun' и ggplot2 'stat_function' - PullRequest
2 голосов
/ 21 апреля 2020

У меня есть данные временных рядов с одним наблюдением в каждый соответствующий момент времени. Я запускаю его через R splinefun, чтобы создать функцию сплайна для наблюдений. Я хотел бы построить эту функцию сплайна в ggplot2, используя stat_function. Я хотел бы, чтобы мой график имел дату / время в качестве оси X вместо индексированной по оси X оси. Достаточно сказать, что я пробовал много вещей, от редактирования результата splinefun (чтобы заставить его работать с as.POSIXct) до бросания различной эстетики в команду ggplot.

Как получить дату / время по оси X?

Вот мой текущий сюжет:

enter image description here

Здесь представлены:

library(ggplot2)

DateTime <- seq.POSIXt(from = as.POSIXct('2020-01-10'),
                       to = as.POSIXct('2020-01-12'),
                       by = '1 hour')
set.seed(1)
y <- runif(length(DateTime), min = 0.5) * cos(as.numeric(DateTime))

df <- data.frame(DateTime = DateTime, 
                 x = seq(1:length(DateTime)),
                 y = y)

myspline <- splinefun(df$x, df$y)

ggplot(mapping = aes(x=1:nrow(df))) +
    stat_function(fun = myspline, size = 1, args = list(deriv = 0))

1 Ответ

2 голосов
/ 21 апреля 2020

Мне кажется, что функция splinefun прекрасно работает со значениями POSIXct для меня

set.seed(1)

df <- transform(data.frame(DateTime = seq.POSIXt(from = as.POSIXct('2020-01-10'),
                                       to = as.POSIXct('2020-01-12'),
                                       by = '1 hour')),
  y=runif(length(DateTime), min = 0.5) * cos(as.numeric(DateTime)))


library(ggplot2)
myspline <- splinefun(df$DateTime, df$y)

ggplot(df, mapping = aes(x=DateTime)) +
  stat_function(fun = myspline, size = 1, args = list(deriv = 0))

enter image description here

Протестировано с версией R 3.6.2

...