我已经使用tmap和底图在R中创建了一个地图,并希望将其另存为图像。
每当我使用tmap_save将其另存为.png时,都会丢失底图。
大概是因为底图在绘图模式下不可见,而仅在视图模式下可见。
是否存在将底图与地图另存为图像的好方法?
我有一个解决方法,首先将其保存为HTML,但这不是一个很好的解决方案。
答案 0 :(得分:5)
我在尝试创建静态地图时遇到了类似的问题。我发现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")
这是一个解决方案:使用read_osm。底图出现并可以保存。
c_osm <- tmaptools::read_osm(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")
答案 1 :(得分:2)
另一种选择是保存tmap object as a leaflet对象,然后在mapview package中使用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")