我使用tmap在R中创建了一张地图,并添加了底图,想要将其保存为图片。
但每当我使用tmap_save保存成.png格式时,就会丢失底图。
很可能是因为底图只能在查看模式下可见,而不是在绘制模式下可见。
有没有一种好的方法可以将含有底图的地图保存成图片呢?
我有一个变通方案,即先将其保存为HTML,但这并不是一个很好的解决办法。
我在尝试创建静态地图时遇到了类似的问题。经过尝试,发现使用tmaptools::read_osm函数可以解决这个问题。以下是三个地图的可复现示例:
在交互视图中创建一个示例地图。但在保存的文件中,底图并未出现。
library(tmaptools)
library(tmap)
data(metro)
tmap_mode("view")
map_a <- tm_basemap("OpenStreetMap.Mapnik") +
tm_shape(metro) +
tm_bubbles(size = "pop2020", col = "red")
map_a
tmap_save(map_a, filename="map_a.png")
tmap_mode("plot")
map_b <- tm_basemap("OpenStreetMap.Mapnik") +
tm_shape(metro) +
tm_bubbles(size = "pop2020", col = "red")
map_b
tmap_save(map_b, filename="map_b.png")
c_osm <- tmaptools::read_osm(bb(metro), ext = 1.05)
map_c <- tm_shape(c_osm) +
tm_rgb() +
tm_shape(metro) +
tm_bubbles(size = "pop2020", col = "red")
map_c
tmap_save(map_c, filename="map_c.png")
另一种选择是将 tmap对象保存为leaflet对象,然后使用mapview包中的mapshot()函数将其保存为图像。以下是一个示例。
library(mapview)
#May need this for mapshot to work
#webshot::install_phantomjs()
data("World")
map <- tm_basemap(leaflet::providers$Esri.WorldTopoMap) +
tm_shape(World) + tm_polygons(alpha = 0,border.col = "black", lwd = 2)
lf <- tmap_leaflet(map)
mapshot(lf, file = "world_map.png")
mapview::mapshot(lf, file = "world_map.png") Could not load c:%5CUsers%5CKSER~1%5CAppData%5CLocal%5CTemp%5C4%5CRtmpYFNniB%5Cfile5fc82aa164bf.html Error in (function (url = NULL, file = "webshot.png", vwidth = 992, vheight = 744, : webshot.js returned failure value: 1
- 89_Simple
ggplot
进行绘图和ggmap
获取底图。但如果能在tmap
中实现,我会很感兴趣。 - see24