【发布时间】:2014-05-03 01:32:14
【问题描述】:
(非常新手,所以请原谅任何混淆/明显的错误)
目标:允许我绘制多个地图的循环,显示网格单元格的密度数据 (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吗? -
您应该使用
aes_string,但我认为更好的方法是将melt()数据从宽格式转换为长格式。