10

我有事件发生后几天的数据。这些数据是不定期采样的——我的时间点是 0、5、6、10、104 天。我没有具体的日期时间信息——也就是说,我不知道我正在研究的事件在现实生活中是什么时候发生的。

我想使用 ggplot 绘制我的时间序列。我可以使用,说

p <- ggplot(data,aes(x=time,y=expression))
p <- p + geom_point()

但当然我的 x 轴变量是相邻绘制的,因此 t=10 和 t=104 之间的距离与 t=5 和 t=6 相同。所以我可以编造一些像

start <- ISOdate(2001, 1, 1, tz = "")
data$time <- start + data$time*60*60*12

这几乎可以工作,但现在我的 x 轴上的刻度是非常不准确的日期时间。我可以重新格式化它们吗?但无论如何都看不到制作“从开始的天数”的格式。到现在为止,我已经在谷歌上搜索了很长一段时间,总感觉我错过了一些非常明显的东西。我是吗?

4

2 回答 2

9

不确定这是否是您要查找的内容(请参阅此相关问题)。您可以使用 scale_x 函数重新格式化轴并处理不规则性。例如:

p <- qplot(1:3, 1:3, geom='line') 
p + scale_x_continuous("", breaks=1:3, 
        labels = as.Date(c("2010-06-03", "2010-06-04", "2010-06-07")))

顺便说一句,这是我为绘制多变量zoo对象创建的函数:

qplot.zoo <- function(x) {
  if(!inherits(x, "zoo")) stop("x must be a zoo object")
  x.df <- data.frame(dates=index(x), coredata(x))
  x.df <- melt(x.df, id="dates", variable="value")
  ggplot(x.df, aes(x=dates, y=value, group=value, colour=value)) + geom_line() + opts(legend.position = "none")
}
于 2010-07-23T19:08:12.450 回答
4

听起来您的time变量是一个因素,或者可能是一个字符向量,而不是一个数值!如果你这样做data$time <- as.numeric(data$time),它可能会很好地解决你的问题。

ggplot 非常擅长为正确的数据使用正确的比例。(可悲的是,R 中的数据导入程序通常不太聪明......)

于 2010-07-23T19:13:34.350 回答