我想知道是否有一个函数可以直接用ggplot2绘制ts
对象。过去,我使用的是以下策略,但现在却出现了错误。
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
对象,我将非常感激。在此先感谢您的帮助。
答案 0 :(得分:8)
试试这个:
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
。
答案 1 :(得分: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.
答案 2 :(得分:2)
此代码适用于我
let str = "runcode -s " + data.a;