R使用sf与tmap循环导出地图生成空白PNG问题求解
问题原因
tmap生成的是可视化对象,在循环/非交互式运行环境中不会自动渲染输出,必须显式调用print()函数才能将图形写入打开的绘图设备,之前的循环只生成了图形对象没有触发打印,所以导出的png文件都是空白内容。
修复批量单图导出
将循环内的绘图代码用print()包裹即可,修正后代码如下:
for (i in 1:3){ png(filename = paste0(colnames(Mesh)[i],".png"), width = 480, height = 480) print( tm_shape(Mesh) + tm_fill(col = colnames(Mesh)[i], breaks = c(0,2.5,5,7.5,10,100), palette= "-magma") ) dev.off() }
合并3张地图导出到同一个文件
可以使用tmap自带的tmap_arrange()函数拼接多个图形对象,统一导出为单张图片,代码示例如下:
# 批量生成3个属性对应的tmap对象,存入列表 plot_list <- lapply(1:3, function(i){ tm_shape(Mesh) + tm_fill(col = colnames(Mesh)[i], breaks = c(0,2.5,5,7.5,10,100), palette= "-magma") + tm_title(colnames(Mesh)[i]) # 增加标题区分不同属性 }) # 按1行3列的布局拼接图形,可自行调整nrow、ncol参数修改布局 combined_plot <- tmap_arrange(plot_list, ncol = 3, widths = c(1,1,1)) # 导出合并后的图形 png("all_properties.png", width = 1440, height = 480) print(combined_plot) dev.off()
内容的提问来源于stack exchange,提问作者ePoQ
相关产品推荐
相关产品推荐

