循环,数据帧和ggplot

时间:2014-11-18 16:54:38

标签: r ggplot2 dataframe

我想使用ggplot在同一页面上显示多个图,并在此处描述多重图函数:http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/。我的数据存储在一个大型数据框中,第一列对应于句点。我想要将列2:26可视化。我的问题可以使用以下方法重现:

rawdata1 <- data.frame("Period" = 1:34, "Sample" = sample(x = c(1,2),34, replace = TRUE),"Runif" = runif(n = 34))

直观地说,我会使用以下代码:(以2:26替换为2:3)

out <- NULL
for (i in 2:3){
  out[[i-1]] <- ggplot(rawdata1, aes("Period", y = value)) + geom_line(aes(x = Period, y = rawdata1[[i]])) + ggtitle(label = colnames(rawdata1)[i])
}

multiplot(plotlist = out, cols = 2)

这成功绘制了多个图形,但我的问题是绘制的每个图形都使用来自同一列的数据(上例中的第3列,我的数据集中的第26列)。我很困惑这是因为我的“out”列表存储了动态存储的y值的ggplot列表。

我的最终值是26,当我从“out”调用一个项目时,它使用i的当前值来创建图形。因此每个图表都使用相同的列显示。因为我是R的新手,所以我的猜测是我没有正确管理我的变量。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您可以在下方找到替代方案:使用melt中的reshape2功能,然后使用facet_wrap进行分面。

require(ggplot2)
require(reshape2)
data.melt <- melt(rawdata1, id.var='Period')
ggplot(data.melt, aes(Period, value)) + 
  geom_line() + 
  facet_wrap(~variable, scales='free_y')

如果您想使用multiplot,可以执行以下操作:

out <- lapply(names(rawdata1)[-1], 
               function(index) ggplot(rawdata1) + 
                 geom_line(aes_string(x = 'Period', y = index)) + 
                 ggtitle(label = index))
multiplot(plotlist = out, cols = 2)