我试图在ggplot中绘制9个变量的每日数据,但是我得到的图表无法正确处理日期变量。 x轴不可读,无法读取图表。我猜测处理日期存在问题。
这是数据: https://dl.dropbox.com/u/22681355/su.csv
以下是我一直在使用的代码:
su=read.csv(file="su.csv", head=TRUE)
meltdf=melt(su)
ggplot(meltdf, aes(x=Date, y=value, colour=variable, group=variable))+geom_line()
这是输出:
https://dl.dropbox.com/u/22681355/output.jpg
这是在excel中完成的相同情节,为什么它看起来完全不同?
答案 0 :(得分:1)
现在Date
是一个因素,而不是真正的R日期对象。您可以使用strptime
将字符串解析为POSIXct
对象。这将产生更好的结果。
与您的问题没有直接关系,但另外您可以使用facet_wrap
拆分时间序列并将它们叠加在一起。我写了一个小函数来计算facet_wrap
所需的指数:
createTimeseriesCutupIdx = function(ncuts, nrows, labels) {
if(missing(labels)) labels = LETTERS[1:ncuts]
pointsPerCutup = floor((1/ncuts) * nrows)
idx = rep(labels, each = pointsPerCutup)
if(length(idx) < nrows) {
idx[(length(idx) + 1):nrows] <- idx[length(idx)]
}
return(idx)
}
以及如何使用它的示例:
require(ggplot2); theme_set(theme_bw())
tserie_length = 5000
df = data.frame(t = as.POSIXct("2006-01-01") + (1:tserie_length) * 3600,
value = runif(tserie_length))
ggplot(df, aes(x = t, y = value)) + geom_line()
df$idx = createTimeseriesCutupIdx(ncuts = 5, nrows = nrow(df))
ggplot(df, aes(x = t, y = value)) +
geom_line() +
facet_wrap(~ idx, scales = "free_x", ncol = 1)
这样就可以以有意义的方式绘制更大的时间序列。