【问题标题】:Time Series Plot Matrix时间序列图矩阵
【发布时间】:2016-04-14 21:53:00
【问题描述】:

我有一个关于 R 的问题: 我试图用包ggplot2ggfortify 在R 中绘制一组每日时间序列商品数据到一个矩阵中。我试图在每个 y 轴上设置标准化值,在 x 轴上设置日期 1/1/2007、1/1/2008 ...。 视觉概念应如下所示:

有谁知道它是如何工作的?

【问题讨论】:

  • 欢迎来到 SO!您需要使用足够的样本数据创建reproducible example 来重现这种情况。
  • 查看zoo 包中的autoplot.zoo 以获取一些示例。 (您提到的 JSS 论文的复制代码与 nanuscript 一起提供。)

标签: r ggplot2 timeserieschart ggfortify


【解决方案1】:

zoo 包支持具有灵活时间索引的时间序列,例如,包括Date。该软件包还带来了一个fortify() 方法,可用于ggplot2 图形。还提供了autoplot() 的便捷方法,请参阅?autoplot.zoo 以选择具有不同布局的工作示例。

对于一个具有 18 个时间序列的示例,索引为 3 x 6 布局中的 Date,我使用来自包 fxregime 的数据集 FXRatesCHF 的子集。这提供了相对于瑞士法郎 (CHF) 的不同货币的汇率。

library("zoo")
data("FXRatesCHF", package = "fxregime")
FX <- window(FXRatesCHF[, c(1:4, 6:19)], start = as.Date("2000-01-01"))

然后ggplot()可以应用到fortify()方法的输出:

library("ggplot2")
ggplot(aes(x = Index, y = Value), data = fortify(FX, melt = TRUE)) +
  geom_line(color = "darkred") +
  xlab("Time") + ylab("FX") +
  theme_bw() +
  facet_wrap(~ Series, scales = "free_y", ncol = 6)

同样的布局也可以通过基本图形轻松创建。只有面板标题在 y 轴上,而不是在灰色阴影主标题中:

plot(FX, col = "darkred", xlab = "Time", nc = 6,
  panel = function(...) { grid(col = "lightgray"); lines(...) })

最后,lattice 版本可以由

创建
library("lattice")
trellis.par.set(theme = standard.theme(color = FALSE))
xyplot(FX, col = "darkred", xlab = "Time", layout = c(6, 3),
  panel = function(...) { panel.grid(col = "lightgray"); panel.lines(...) })

【讨论】:

  • 我尝试了以下解决方案,效果很好:'# 标准化数据 data_std
  • 我仍然建议使用适当的时间序列对象(例如,zoo,在我的示例中),因为有专门的绘图工具。用于缩放数据的for() 循环也不必要地笨拙。如果您想在我的示例中缩放数据,只需在绘图之前包含 FX &lt;- scale(FX)
猜你喜欢
  • 2014-07-17
  • 1970-01-01
  • 2018-11-04
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 2011-12-29
  • 1970-01-01
相关资源
最近更新 更多