过去几天我遇到了这个问题。
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个不同的图。
我尝试将它们写入空列表,但是非grobs与grid.arrange()不兼容。我也尝试过删除非grobs。我使用每个绘图编写对象A1到A10。我也尝试在每个循环结束时删除“nam”......然而,似乎这个循环产生了10个对象,A1虽然是A10,但是相同的情节,意味着循环中的最后一个绘图被刺激地写入所有对象。
我想将其扩展到大约100个地块。所以,我想做点什么:
grid.arrange(A1:A100)
我尝试使用seq()和paste()的不同组合无济于事。
我在这里和网上看过类似的问题,但是找不到可行的解决方案。
感谢。
答案 0 :(得分:2)
我建议采用不同的方法。将数据从长到长重新整形,然后使用构面。
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)
答案 1 :(得分:0)
在这里,您需要在功能ggplot中将映射参数更改为aes_string()
for(i in 1:10){
nam <- paste("A", i, sep = "")
p <- ggplot(data=PCdf8, mapping = aes_string(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)
希望这会有所帮助。