最近几天我一直被这个问题困扰着。
for(i in 1:10){
nam <- paste("A", i, sep = "")
p <- ggplot(data=PCdf8, aes(x = 1:nrow(PCdf8), y = PCdf8[,i])) +
geom_line(colour = "#0072B2", size = 0.5)
assign(nam, p)
}
grid.arrange(A1, A2, A3, A4, A5, A6, A7, A9, A10)
我的代码将同一图(#10,顺便说一句)的网格吐出 10 次,而不是 10 个不同的图。
我尝试将它们写入一个空列表,但非 grob 与 grid.arrange() 不兼容。我也尝试过删除非 grobs。我求助于将每个情节写入对象 A1 到 A10。我也试过在每个循环的末尾删除“nam”……不过,这个循环似乎产生了 10 个对象,A1 到 A10,具有相同的情节,这意味着循环中的最后一个情节被恼人地写入了所有对象。
我想将其扩展到大约 100 个地 block 。所以,我想做类似的事情:
grid.arrange(A1:A100)
我尝试使用不同的 seq() 和 paste() 组合,但没有成功。
我在这里和网上看到过类似的问题,但找不到可行的解决方案。
谢谢。
最佳答案
我建议采用不同的方法。将数据从宽改造成长,然后使用分面。
library(dplyr)
library(tidyr)
library(ggplot2)
# Example data frame
df1 <- as.data.frame(matrix(rnorm(100), ncol = 10, nrow = 10))
df1 %>%
mutate(x = 1:nrow(df1)) %>%
gather(var, val, -x) %>%
ggplot(aes(x, val)) + geom_line() + facet_wrap(~var, ncol = 5)
关于r - 使用 for 循环生成 ggplots 网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43989647/