簡體   English   中英

使用 ggplot2 直接繪制 ts 對象

[英]Directly Plotting ts object with ggplot2

我想知道是否有一個函數可以直接用 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”

如何使用ggplot2直接繪制ts對象。

嘗試這個:

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

不知道為什么它以前有效(因為在我對 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.

這段代碼對我有用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM