Прямо нарисовать объект ts с помощью ggplot2
Интересно, если есть функция для построения ts
объекта непосредственно ggplot2. Раньше я использовал следующую стратегию, но теперь она выдает ошибку.
set.seed(12345)
dat <- ts(data=runif(n=10, min=50, max=100), frequency = 4, start = c(1959, 2))
df <- data.frame(date=as.Date(time(dat)), Y=as.matrix(dat))
library(ggplot2)
ggplot(data=df, mapping=aes(x=date, y=Y))+geom_point()
ошибка
Error in as.Date.default(time(dat)) :
do not know how to convert 'time(dat)' to class "Date"
Как я могу непосредственно построить ts
объект с ggplot2
.
Ответы
Ответ 1
Попробуйте следующее:
library(zoo)
library(ggplot2)
library(scales)
autoplot(as.zoo(dat), geom = "point")
или возможно:
autoplot(as.zoo(dat), geom = "point") + scale_x_yearqtr()
Подробнее см. ?autoplot.zoo
.
Примечание.. Кстати, код в вопросе работает, если вы сначала выполните команду library(zoo)
.
Обновления Добавлено второе решение, library(scales)
и переключено с yearmon
на yearqtr
.
Ответ 2
Не знаю, почему это сработало раньше (так как это не показалось бы действительным при моем понимании функционалов Date), но вы можете исправить его с помощью zoo:: as.yearqtr
library(zoo)
?as.yearqtr
set.seed(12345)
dat <- ts(data=runif(n=10, min=50, max=100), frequency = 4, start = c(1959, 2))
df <- data.frame(date=as.Date(as.yearqtr(time(dat))), Y=as.matrix(dat))
library(ggplot2)
ggplot(data=df, mapping=aes(x=date, y=Y))+geom_point()
# No errors. The plot has YYYY-MM labeling as expected for a ggplot2-Date axis.
Ответ 3
Этот код работает для меня
set.seed(12345)
dat <- ts(data=runif(n=10, min=50, max=100), frequency = 4, start = c(1959, 2))
library(ggfortify)
autoplot(dat, geom = "point", ts.colour = ('dodgerblue3')) #Option 1
library(zoo)
autoplot.zoo(as.zoo(dat), geom = "point") #Option 2