首页 文章

在for循环中ggplot的奇怪问题

提问于
浏览
-1

我试图在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,所以它应该也可以 .

1 回答

  • 2

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

    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)
    

相关问题