在for循环中使用ggplot2不会显示绘图名称 我想将绘图打印到一页并保存
我有60个csv文件,每个文件包含两列,第一列是日期,第二列是ssh,每个列具有不同的行号。我将它们列在称为文件的变量中,然后绘制它们。 for循环产生了60个图。问题是如何知道这些地块的名称,以便在需要时调用它们。在一页中打印4个地块,因此最后我将有15页,每个页面包含4个地块。 当我使用
library(gridExtra)
grid.arrange(p1,p2,p3,p4, nrow=2,ncol=2)
grid.arrange(p5,p6,p7,p8, nrow=2,ncol=2)
依此类推,直到p60 它没有显示结果。警告消息说,没有名为p1,p2,p3,p4,.... p60的对象。
代码如下:
files<- list.files("F:/R Practice/time series")
for (i in seq_along(files)){
mydf <- read.csv(files[i], stringsAsFactors=FALSE)
a<- data.frame(as.Date(mydf$date, "%d-%m-%y"),mydf[,-1])
names(a)[1]<- "Date"
names(a)[2]<- "SSH"
b <- zoo(a[,-1],order.by=as.Date(a[,1]))
p<- ggplot(a, aes(x=Date,y=SSH, color=SSH)) +geom_line(colour="darkblue")# +labs(title = "gridcell of (31.25N, 33.25E) ",x="Date", y="SSH")
p<-p+ggtitle(readline(prompt = "enter cell coordinates: "))+xlab("Year")+ylab("weighted average SSH of center cell")
# adding atrribute to the plot p[i]
p<-p+theme(axis.title.x=element_text(color = "black",size = 12),
axis.title.y=element_text(color = "black",size = 8),
axis.text.x=element_text(color="black",size=8),
axis.text.y = element_text(color = "black",size = 8),
panel.background = element_rect(colour = "black", size=0.5 ,fill = NA),
panel.grid.minor = element_blank(),
panel.grid.major = element_blank(),
axis.line = element_line(colour = "black",size=1),
legend.position="none" ,
plot.title=element_text(hjust = 0.5,vjust= 0.5,lineheight = .3,face = "bold"))
print(p)
}
答案 0 :(得分:2)
您的代码每次都覆盖p
到最后一个绘图。这是使用ggplot2
帮助示例中的示例提供的更简单的代码,但具有类似于您的循环。
df <- data.frame(
gp = factor(rep(letters[1:3], each = 10)),
y = rnorm(30)
)
p.list<- list()
for (i in 1:4)
{
df<- sample_frac(df, 0.5)
p<- ggplot(df, aes(gp, y)) +
geom_point() +
geom_point(data = ds, aes(y = mean), colour = 'red', size = 3)
p.list[[i]] <-p
}
grid.arrange(p.list[[1]], p.list[[2]], p.list[[3]], p.list[[4]], nrow= 2 )
请注意两件事:
p.list
从一个空列表开始。
在每个循环的末尾,您将图添加到列表的编号元素中,即p.list[[i]] <- p
p.list
成长为一个列表,每个编号元素(1:4)都保存一个图,每个图也都是一个命名列表。