首页 > 解决方案 > 从列表中绘制多个图

问题描述

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

标签: r

解决方案


使用包ggplot2可以按如下方式完成。我假设您有一个包含 15 个数据框的列表,名为df_list.

首先,rbind它们与公司名称一起作为新列。这些公司的名称在这个假数据案例中存储为 df's 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)

在此处输入图像描述

数据创建代码。

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 = ".")

推荐阅读