我有一个跨越3个省的流域数据集。每个流域都有一个相应的shapefile,在3个rcp(气候预测模型)下,生态系统破坏的评分从0到1。下面是我的dataframe的头:
ws rcp ecodisrup geometry
ANNAPOLIS_sp rcp26 0.09090909 MULTIPOLYGON (((-64.86239 4...
BARRINGTON_C rcp26 0.00000000 MULTIPOLYGON (((-65.4722 43...
CHETICAMP_RI rcp26 0.09090909 MULTIPOLYGON (((-60.59559 4...
CLAM_HRB_ST. rcp26 0.27272727 MULTIPOLYGON (((-61.38909 4...
COUNTRY_HARB rcp26 0.09090909 MULTIPOLYGON (((-61.96444 4...
EAST_INDIAN_ rcp26 0.09090909 MULTIPOLYGON (((-63.94016 4...
流域及其shapefile对于每个rcp(26,45,85)重复,例如:
ws rcp ecodisrup geometry
ANNAPOLIS_sp rcp26 0.09090909 MULTIPOLYGON (((-64.86239 4...
... rcp26 0.00000000 MULTIPOLYGON (((-65.4722 43...
46th ws rcp26 0.09090909 MULTIPOLYGON (((-60.59559 4...
ANNAPOLIS_sp rcp45 0.27272727 MULTIPOLYGON (((-64.86239 4...
... rcp45 0.09090909 MULTIPOLYGON (((-65.4722 43...
46th ws rcp45 0.09090909 MULTIPOLYGON (((-60.59559 4...
ANNAPOLIS_sp rcp85 0.09090909 MULTIPOLYGON (((-64.86239 4...
... rcp85 0.00000000 MULTIPOLYGON (((-65.4722 43...
46th ws rcp85 0.09090909 MULTIPOLYGON (((-60.59559 4...
我想通过写一个for循环来绘制三个rcp场景下的分水岭,用ecodisrup着色。我遇到的问题是在for循环中包含一个ggsave函数,而且我正在编写的循环只是三次生成相同的map。
稍后在我的分析中,我将需要相同类型的for循环进行Map,但我将添加一个物种列(在3个RCP场景下,为所有流域的每个物种生成一个由ecodisrup着色的Map)。
下面是我以前尝试过的代码,预期输出三个map(每个rcp一个)。相反,我得到了三张Map,但它们都有完全相同的颜色(不确定它们是否只是被最后一张着色?rcp85?
# make empty list to fill in with plots
ecodis_rcp_plots = list()
# define the different rcps
ecodis_rcp = unique(ecodis$rcp)
# begin for loop
for (rcp in ecodis_rcp){
ecodis_rcp_plots[[rcp]] = ggplot(data = ecodis, aes(geometry = geometry)) +
geom_sf(aes(fill = ecodisrup)) +
scale_fill_viridis_c(option = "viridis", limits = c(0, 1))
ggsave(paste("C:/Users/myname/Desktop/EcoDis", rcp, ".png"),ecodis_rcp_plots[[rcp]],width=8,height=8,units="in",dpi=300)
}
任何见解将不胜感激,谢谢!
1条答案
按热度按时间kb5ga3dv1#
一个选项是首先拆分数据集,然后循环遍历结果sf对象的列表。以下是基于
sf
包中的nc
数据集的更通用的示例:创建于2023-06-16带有reprex v2.0.2