Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用ggplot,如何自动设置时间序列图的x轴?_R_Ggplot2 - Fatal编程技术网

R 使用ggplot,如何自动设置时间序列图的x轴?

R 使用ggplot,如何自动设置时间序列图的x轴?,r,ggplot2,R,Ggplot2,是否有一种方法可以使用自动设置时间轴的ggplot绘制“ts”类的单变量时间序列?我想要一些类似于基本图形的plot.ts()的东西 在我看来,最粗糙的时间粒度是一天。是这样吗?在我的工作中,我必须处理月度和季度数据,将每个观察值分配到月/季度的开始/结束会导致观察值水平分布不规则,因为月/季度的长度不相等。这可能更有意义,但我的听众已经习惯于看到月/季之间有规律的间隔 我知道我可以通过手动将x轴设置为时间轴或带有我自己标签的数字轴来解决上述所有问题。我特别想寻找一种方法,通过使用ts对象中的时

是否有一种方法可以使用自动设置时间轴的ggplot绘制“ts”类的单变量时间序列?我想要一些类似于基本图形的plot.ts()的东西

在我看来,最粗糙的时间粒度是一天。是这样吗?在我的工作中,我必须处理月度和季度数据,将每个观察值分配到月/季度的开始/结束会导致观察值水平分布不规则,因为月/季度的长度不相等。这可能更有意义,但我的听众已经习惯于看到月/季之间有规律的间隔


我知道我可以通过手动将x轴设置为时间轴或带有我自己标签的数字轴来解决上述所有问题。我特别想寻找一种方法,通过使用ts对象中的时间信息自动执行此操作。

ggplot2不支持ts对象:只支持类日期和类POSIXct的时间。因此,您需要首先将数据转换为合适的类


请看一看示例。

我尝试使用函数从ts对象生成POSIX日期,假设周期为年:

tsdates <- function(ts){
  dur<-12%/%frequency(ts)
  years<-trunc(time(ts))
  months<-(cycle(ts)-1)*dur+1
  yr.mn<-as.data.frame(cbind(years,months))
  dt<-apply(yr.mn,1,function(r){paste(r[1],r[2],'01',sep='/')})
  as.POSIXct(dt,tz='UTC')
}
一个更完整的解决方案需要能够安排多个时间序列。此外,能够根据观察时间自动对齐点也很好,这样我们就可以执行以下操作:

qplot(presidents,lag(presidents))

来自?ts示例的时间序列数据

gnp <- ts(cumsum(1 + round(rnorm(100), 2)), start = c(1954, 7), frequency = 12)

new.date <- seq(as.Date(paste(c(start(gnp),1), collapse = "/")), by = "month", length.out = length(gnp))
祝你一切顺利

杰伊

这个怎么样


代码
set.seed(12345)

dat要为ggplot创建数据帧,可以执行以下操作:dat抛出错误:“as.Date.default(time(dat))中的错误:不知道如何将“time(dat)”转换为类“Date”
gnp <- ts(cumsum(1 + round(rnorm(100), 2)), start = c(1954, 7), frequency = 12)

new.date <- seq(as.Date(paste(c(start(gnp),1), collapse = "/")), by = "month", length.out = length(gnp))
dat <- data.frame(date=new.date, value=gnp) 
ggplot(data=dat) + geom_line(aes(date, gnp))
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()