重塑数组

时间:2017-08-16 18:41:12

标签: r ggplot2 reshape2

考虑以下示例:

nt <- 5
a <- array(runif(10), dim=c(nt, 2))
t <- seq(0, 10, length.out=nt)
a <- data.frame(a)

其中a是具有5观察值和2个特征的时间序列,t由每个观察值的时间索引向量组成。我想将数组a绘制为矢量,使得x轴是时间索引,y轴是数组a中的原始强度。

我可以使用以下代码执行此操作:

  xlabel <- 'time'
  ylabel <- 'intensity'
  legend='feature'
  dsm = melt(a)
  colnames(dsm) <- c(xlabel, legend, ylabel)

  aplot <- ggplot(data=dsm, aes_string(x=xlabel, y=ylabel, group=legend, color=legend)) +
    geom_line(alpha=.2) +
    scale_y_continuous()

我将希望将观察结果绘制为0, 1, ...而不是t的元素,因为当我融化a时,它只会折叠原始数组,以便x, y索引只是原始矩阵中的坐标。是否有一种优雅的方式来替换这些坐标,并进行重新映射?比方说,允许我很容易地{0:0, 1:t[1], 2:t[2], 3:t[3]...}dsm的时间列?我可以看到我可以在for循环中手动执行此操作,但这似乎是非常不必要的,我相信有一些内置会为我做这个。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

library(ggplot2)
ggplot(melt(data.table(a, time = t), "time"), 
       aes(time, value, group = variable)) + 
    geom_line()