在同一图表中循环多个qplot

时间:2014-04-10 11:19:10

标签: r ggplot2

我正在努力使用ggplot2在一个帧中生成多个图形。我的问题是我想使用循环分别选择每个图形,然后在框架内绘制它。问题是qplot对每个图使用相同的数据,而它改变了图的标题。

这是我的代码:

require("ggplot2")
require("gridExtra")

columns <- 1:4

#myData is a data.frame and looks like:
head(myData)[1:4]
  Crude Oil Heating Oil Natural Gas Cocoa
1     18.54        0.57        2.15  1278
2     17.40        0.50        2.18  1415
3     17.07        0.49        2.08  1221
4     20.69        0.57        2.14  1248

for (i in 1:length(columns)) {

p <- (qplot(data=myData, x=time, geom="blank")
+ geom_line(aes(y=myData[[i]]))
+ labs(title=names(myData[i]), y=NULL, x=NULL)
+ theme_bw())
plots[i] <- list(p)

}

args.list <- c(plots,list(nrow=2,ncol=2))
do.call(grid.arrange, args.list)

由于我缺乏声誉,我无法在此处上传输出,所以我必须使用tinypic代替: http://sv.tinypic.com/r/zu38tv/8

1 个答案:

答案 0 :(得分:0)

它更容易使用&#34; long&#34;数据而不是&#34;宽&#34;数据与ggplot2(see here)。这意味着要做的第一件事就是将数据格式化为正确的格式:

library(reshape2)
myData$Time = time
data.melted = melt(myData, id="Time")

这会把它变成更像的格式:

Time   variable   value
1      Crude Oil  18.54
2      Crude Oil  17.40

在这一点上,使用facetting很容易制作这种情节(不需要循环):

print(ggplot(data.melted, aes(x=time, y=value)) + geom_line() + facet_wrap(~ variable)
           + theme_bw())