1

我试图从 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中完成的相同情节,为什么看起来完全不同?

4

1 回答 1

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)

在此处输入图像描述

这使得以有意义的方式绘制更大的时间序列成为可能。

于 2012-11-12T10:14:26.170 回答