我正在努力使用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
答案 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())