在for循环中重命名ggplot2图
我有一个关于在for循环中创建ggplot2图形的问题,根据迭代重命名它们,然后将这些图形排列在网格中。
我想要做这样的虚拟示例
library(ggplot2)
a = c(1, 2, 3)
b = c(4, 5, 6)
for ( i in c(1:5)){
x = i*a
y = i*b
p = qplot(x, y)
... do something to rename p as plot_i...
}
...做一些事情,以将plot_1
... plot_6
成2 x 3的网格
有什么建议么?
您可以将这些图保存到列表中:
library(ggplot2)
library(gridExtra)
a <- c(1, 2, 3)
b <- c(4, 5, 6)
out <- NULL
for (i in 1:10){
take <- data.frame(a = a * i, b = b * i)
out[[i]] <- ggplot(take, aes(x = a, y = b)) + geom_point()
}
grid.arrange(out[[1]], out[[10]], out[[2]], out[[5]], nrow = 2)
解决这个问题的另一种方法是在你的情节中使用使用方面:
a <- 1:3
b <- 4:6
# Create an empty data.frame
pdata <- data.frame()
for( i in 1:6){
# Create a temporary data.frame to store data for single plot
tmp <- data.frame(
plot = i,
x = i*a,
y = i*b
)
# Use rbind to add this plot data
pdata <- rbind(pdata, tmp)
}
# Plot results using ggplot with facets
ggplot(pdata, aes(x=x, y=y)) + geom_point() + facet_wrap(~plot)
cowplot库有plot_grid
函数,可以很好地完成这项工作:
library(ggplot2)
library(cowplot)
makeplot <- function(i, a=c(1,2,3), b=c(4,5,6)) {
take <- data.frame(a=a*i, b=b*i)
ggplot(take, aes(x=a, y=b)) + geom_point()
}
nums = 1:10
plots <- lapply(nums, makeplot)
plot_grid(plotlist = plots)
链接地址: http://www.djcxy.com/p/30837.html