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)
我正在尝试在 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)