从列表中绘制多个图形

时间:2019-06-20 11:01:41

标签: r

我有一个1990年至1994年的时间序列数据,其中有15个工作表中的5个变量。我将所有这些数据读到列表中。我需要对15家公司的所有5个变量进行时间序列图绘制。如何才能做到这一点?我的意思是我基​​本上需要5个数字,每个数字包含15个公司各自变量的时间序列图。

1 个答案:

答案 0 :(得分:1)

使用软件包ggplot2,可以按以下步骤进行操作。我假设您有一个名为df_list的15个数据帧的列表。

首先,rbind将它们与公司名称一起添加为新列。在此伪造的数据案例中,公司名称存储为df的names

all_df <- lapply(names(df_list), function(x){
  DF <- df_list[[x]]
  DF$Company <- x
  DF
})
all_df <- do.call(rbind, all_df)

然后,从宽幅格式更改为长格式。

long_df <- reshape2::melt(all_df, id.vars = c("Company", "Date"))

现在,绘制它们。这些图可以随意定制,上面有很多帖子。

library(ggplot2)

ggplot(long_df, aes(x = Date, y = value, colour = Company)) +
  geom_line() +
  facet_wrap(~ variable)

enter image description here

数据创建代码。

set.seed(1234)

Dates <- seq(as.Date("1990-01-01"), as.Date("1994-12-31"), by = "month")
n <- length(Dates)
df_list <- lapply(1:15, function(i){
  tmp <- matrix(rnorm(5*n), ncol = 5)
  tmp <- apply(tmp, 2, cumsum)
  colnames(tmp) <- paste0("Var", 1:5)
  tmp <- as.data.frame(tmp)
  tmp$Date <- Dates
  tmp
})
names(df_list) <- paste("Company", seq_along(df_list), sep = ".")