for循环中ggplot的奇怪问题

Strange issue with ggplot inside a for-loop

我正在尝试在 for 循环中使用 ggplot 绘制几张图(名为 p1、p2、p3、p4、p5、p6):

for(i in 1:6){
assign(paste0("p",i), ggplot(TS, aes(Timestamp,TS[,i+1])) +
geom_line() +
scale_x_datetime(breaks = date_breaks("5 day")) +
theme_few())
}

p<-arrangeGrob(p1,p2,p3,p4,p5,p6)
ggsave("~/Desktop/TS.png",p)

然而,所有图表都与最后一张相同。即,p1 = p2 = p3 = p4 = p5 = p6!这是不可能的,因为用于绘制它们的变量值非常不同。这很奇怪,我不知道我做错了什么。当我不使用 for 循环并手动将绘图存储在 p1,...p6 时,即

assign(paste0("p",1), ggplot(TS, aes(Timestamp,TS[,2])) +
geom_line() +
scale_x_datetime(breaks = date_breaks("5 day")) +
theme_few())
   .
   .
   .
assign(paste0("p",6), ggplot(TS, aes(Timestamp,TS[,7])) +
geom_line() +
scale_x_datetime(breaks = date_breaks("5 day")) +
theme_few())

一切都很好。

我也试过了

p <- list()
for(i in 1:6){
p[[i]] <- ggplot(TS, aes(Timestamp,TS[,i+1])) +
geom_line() +
scale_x_datetime(breaks = date_breaks("5 day")) +
theme_few()
}
do.call(grid.arrange,p)

但是同样的问题发生了。

我发现另一个线程(此处:ggplot does not work if it is inside a for loop although it works outside of it)似乎有类似的问题,但该问题已使用 "print" 解决。在我的例子中,我将每个地块分配给相应的 "p"i 所以它也应该工作。

正如评论中所建议的那样。问题已解决如下:

for (i in colnames(TS)[2:6]) {
assign(paste0("p",i),ggplot(TS, aes_string(x="Timestamp", y=i)) +
       geom_line() +
       scale_x_datetime(breaks = date_breaks("5 day")) +
       theme_few())
}

p<-arrangeGrob(pT1,pT2,pT3,pT4,pT5,pT6)
ggsave("~/Desktop//TS.png",p)