我想创建4个图,在模拟中显示4种不同的条件。使用for循环迭代模拟中的4个条件。我想做的是:
for (cond in 1:4){
1.RUN SIMULATION
2.PLOT RESULTS
}
最后,我希望在网格上排列4个图。使用plot()
,我可以使用par(mfrow)
,并自动添加绘图。有没有办法用ggplot做同样的事情?
我知道我可以使用grid.arrange()
,但这需要将图存储在单独的对象中,plot1 ... plot5。但它不可能做到:
for (cond in 1:4){
1. run simulation
2. plot[cond]<-ggplot(...)
}
我无法为这些情节提供单独的名称,例如循环中的plot1,plot2,plot3。
答案 0 :(得分:4)
您可以使用gridExtra包:
library(gridExtra)
library(ggplot2)
p <- list()
for(i in 1:4){
p[[i]] <- ggplot(YOUR DATA, ETC.)
}
do.call(grid.arrange,p)
答案 1 :(得分:2)
在这种情况下我会使用facetting。根据我的经验,ggplot2中很少需要明确地安排子图。一个模型示例可能会更好地说明我的观点:
run_model = function(id) {
data.frame(x_values = 1:1000,
y_values = runif(1000),
id = sprintf('Plot %d', id))
}
df = do.call('rbind', lapply(1:4, run_model))
head(df)
x_values y_values id
1 1 0.7000696 Plot 1
2 2 0.3992786 Plot 1
3 3 0.2718229 Plot 1
4 4 0.4049928 Plot 1
5 5 0.4158864 Plot 1
6 6 0.1457746 Plot 1
此处,id
是指定值属于哪个模型运行的列。可以使用以下方式完成绘图:
library(ggplot2)
ggplot(df, aes(x = x_values, y = y_values)) + geom_point() + facet_wrap(~ id)
答案 2 :(得分:0)
另一种选择是使用多重函数:
library(ggplot2)
p <- list()
for(i in 1:4){
p[[i]] <- ggplot(YOUR DATA, ETC.)
}
do.call(multiplot,p)
有关该内容的更多信息 - http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_%28ggplot2%29/