Mik*_*war 9 r time-series ggplot2
我在事件发生后的几天内都有数据.这些数据是不定期抽样的 - 我的时间点分别为0,5,6,10,104天.我没有具体的日期时间信息 - 即我不知道在现实生活中我正在研究的事件发生了什么.
我想用ggplot绘制我的时间序列.我可以用,比方说
p <- ggplot(data,aes(x=time,y=expression))
p <- p + geom_point()
Run Code Online (Sandbox Code Playgroud)
但当然我的x轴变量是彼此相邻绘制的,因此t = 10和t = 104之间的距离与t = 5和t = 6相同.所以我可以做点什么
start <- ISOdate(2001, 1, 1, tz = "")
data$time <- start + data$time*60*60*12
Run Code Online (Sandbox Code Playgroud)
几乎可以工作,但现在我的x轴上的刻度是非常不准确的日期时间.我可以重新格式化它们吗?但无论如何都看不到格式"从开始的日子".到现在为止,我一直在谷歌上搜索相当长一段时间,有一种唠叨的感觉,我错过了一些非常明显的东西.我呢?
不确定这是否是您正在寻找的(请参阅此相关问题).您可以使用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")))
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这是我为绘制多变量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")
}
Run Code Online (Sandbox Code Playgroud)
听起来你的time变量是一个因子或者可能是一个字符向量,而不是一个数值!如果你data$time <- as.numeric(data$time)这样做可能会很好地解决你的问题。
ggplot 非常擅长为正确类型的数据使用正确的比例。(遗憾的是,R 中的数据导入例程通常不太智能......)