使用ggplot2直接绘制ts对象

MYa*_*208 10 r 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()
Run Code Online (Sandbox Code Playgroud)

错误

Error in as.Date.default(time(dat)) : 
  do not know how to convert 'time(dat)' to class “Date”
Run Code Online (Sandbox Code Playgroud)

如果有人指导我如何直接绘制ts对象,我将非常感激ggplot2.在此先感谢您的帮助.

G. *_*eck 8

试试这个:

library(zoo)
library(ggplot2)
library(scales)

autoplot(as.zoo(dat), geom = "point")
Run Code Online (Sandbox Code Playgroud)

或者可能:

autoplot(as.zoo(dat), geom = "point") + scale_x_yearqtr()
Run Code Online (Sandbox Code Playgroud)

有关详情?autoplot.zoo,请参阅.

注意:顺便说一句,如果您library(zoo)首先发出命令,问题中的代码将起作用.

更新 添加了第二个解决方案,library(scales)并从切换yearmonyearqtr.


42-*_*42- 5

不知道为什么它之前有效(因为根据我对Date functins的理解它似乎没有效果)但是你可以使用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.
Run Code Online (Sandbox Code Playgroud)