在R中用几行代码创建多个绘图

g6baxovj  于 2023-02-26  发布在  其他
关注(0)|答案(1)|浏览(134)

我想在同一个图中绘制多个时间序列变量,以便可以看到时间序列滞后如何排列。我将为不同的数据组绘制几个不同的图,每个图将代表不同的数据组,尽管每个图都有同名的变量。
我可以一个一个地做,一次一个变量,但是我有一百个变量。
以下是我的数据集示例,其中lag是滞后点(来自ccf()),每个var是该滞后点处不同变量的ACF。

sampledf <- data.frame(
  lag = -10:10,
  var1 = rnorm(21),
  var2 = rnorm(21),
  var3 = rnorm(21)
)

现在我可以很容易地把它们画成这样:

plot(sampledf$lag,
     sampledf$var1, 
     type = "l",
     col = 1,
     xlab = "Lag",
     ylab = "ACF")
lines(sampledf$lag,
     sampledf$var2,
      type = "l",
      col = 2)
lines(sampledf$lag,
     sampledf$var3,
      type = "l",
      col = 3)
legend("topright",                          
       c("Var1", "Var2", "Var3"),
       lty = 1,
       col = 1:3)

但是我需要手动计算每个变量,如果我想用不同的方式来查看相关性,例如,从sampledf1sampledf2sampledf20,用var1绘制一个图,我就必须从头开始。
有没有一种方法可以用更少的代码行来自动化这一点?这超出了我的R编程水平,但我意识到这可能与函数和其他东西有关(R在我的工作中主要是一个“统计”工具)。
如果有一种完全不同(但更简单)的方法来实现这一点,我也愿意使用不同的函数来以不同的方式查看交叉相关性。

tjjdgumg

tjjdgumg1#

您可能很快就会用完所有颜色,但您可以执行以下操作:

碱基R

plot(sampledf$lag,
     sampledf$var1, 
     type = "n",
     col = 1,
     xlab = "Lag",
     ylab = "ACF")
Map(function(y, col) lines(sampledf$lag, y, col=col, type="l"),
    sampledf[,-1], seq_len(ncol(sampledf)-1))
legend("topright",                          
       c("Var1", "Var2", "Var3"),
       lty = 1,
       col = 1:3)

ggplot2

这在“长”格式中效果更好。

library(ggplot2)
tidyr::pivot_longer(sampledf, -lag) |>
  ggplot(aes(lag, value, color = name, group = name)) +
  geom_line()

相关问题