R通过函数生成多幅绘图单独保存时所有文件均重复首图如何解决
错误原因
- 你在
for循环内部重复调用purrr::map生成了包含所有图表的完整列表,而非调用对应单个保护区的图表 - 每次循环你都将完整的图表列表打印到当前PDF文件中,打开文件时默认显示的是列表的第一个图表,所以你会觉得所有文件内容都一样
- 额外冗余项:你的绘图函数已经提前过滤了单个
Preserve_N的值,末尾的facet_wrap(~Preserve_N)没有实际作用,可以删除。
修正方案
你已经在循环外提前生成了按preserve_names_LI顺序存储所有图表的plots列表,直接在循环中按索引提取对应单个图表保存即可,修正后的代码如下:
### 原有逻辑保持不变,提前生成所有图表 preserve_names_LI <- unique(subsetLI15min$Preserve_N) plots<- purrr::map(.x = preserve_names_LI, .f = ~single_facet_LI15(.x)) ### 修正后的保存逻辑 for(i in seq_along(preserve_names_LI)){ # 提取当前循环对应的文件名和图表 current_preserve <- preserve_names_LI[i] current_plot <- plots[[i]] # 保存单个图表 pdf(paste0(current_preserve,".pdf")) print(current_plot) dev.off() }
如果不需要提前存储所有图表,也可以简化为直接在循环中生成并保存:
preserve_names_LI <- unique(subsetLI15min$Preserve_N) for(x in preserve_names_LI){ current_plot <- single_facet_LI15(x) pdf(paste0(x,".pdf")) print(current_plot) dev.off() }
内容的提问来源于stack exchange,提问作者Marcela M Maldonado
相关产品推荐
相关产品推荐

