目标:编写一个循环,使我能够绘制多个地图,在其中显示网格单元的密度数据(D
),覆盖多个月份和季节。每个月、季节等的数据都在8个单独的列中;循环将遍历数据框(DF)的列。
尝试过:将每次循环迭代的图形添加到列表中,以便可以调用所有图形以显示在多面板图形中。
out <- NULL
for(i in 1:8){
D <- DF[,i]
x <- names(DF)[i]
p <-ggplot() + geom_polygon(data=DF, aes(x=long, y=lat, group=Name, fill=D), colour = "lightgrey") +labs(title=x)
out[[i]]<- p
print(p)
}
问题:尽管
print(p)
在每次迭代中产生了正确的图形,但列表out
中的图形仅显示最后一次循环的数据。因此,当我尝试使用
grid.arrange
与“out”中的图形时,所有图形都显示相同的数据(来自第8列); 但是,这些绘图确实保留了正确的标题。 当我尝试调用每个图 - 例如,print(out [[1]])
,显示与print(out [[8]])
相同的图 - 除了标题标签外。似乎先前列表中的元素正在被每次循环覆盖? 但是,这些图的标题似乎显示正确。
我的
out
列表构造是否存在明显错误? 如何避免覆盖每个先前的图?
out[[i]]<- p
和print(p)
,也不分配p
吗? - Rich Scrivenaes_string
,但在我看来更好的方法是将数据从宽格式转换为长格式,使用melt()
函数。 - baptiste