You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用basemaps_gglayer()添加底图失败的技术求助

问题:使用basemaps包为ggplot绘图添加底图失败

原绘图代码可正常运行:

ggplot() +
  geom_raster(subset(results, !is.na(var)), mapping = aes(long, lat, fill = var), interpolate = TRUE) +
  coord_sf(datum = "ESRI:102001") +
  scale_fill_gradientn('Variance', colours = colors) + #limits = c(0, 1)) +
  geom_sf(data = lg.parks, fill = NA, color = "black") + 
  geom_sf(data = canada, fill = NA, color = "black") + 
  annotation_scale(location = "bl", width_hint = 0.5) +
  annotation_north_arrow(location = "bl", which_north = "true", 
                         pad_x = unit(0.75, "in"), pad_y = unit(0.5, "in"),
                         style = north_arrow_fancy_orienteering) +
  theme_void() +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.title.x=element_blank(),
        axis.title.y=element_blank())

尝试添加底图时的错误情况

错误1:使用basemap_gglayer(ext = ext(canada))

Error in st_transform.sfc(st_as_sfc(st_bbox(x)), crs = crs_webmerc) :

cannot transform sfc object with missing crs

错误2:改用ext = st_bbox(canada)后

Error in scale_fill_gradientn():

! Discrete values supplied to continuous scale.

ℹ Example values: "#91DED8", "#91DED8", "#91DED8", "#91DED8", and "#91DED8"

尝试用tidyterra绘制底图的情况

尝试将底图保存为独立栅格,用tidyterra::geom_spatraster()绘制,代码如下:

bm <- basemaps::basemap_raster(ext = st_bbox(canada))
bm <- as(bm, "SpatRaster")

ggplot() +
  geom_spatraster(data = bm) +
  geom_raster(subset(results, !is.na(var)), mapping = aes(long, lat, fill = var), interpolate = TRUE) +
  coord_sf(datum = "ESRI:102001") +
  scale_fill_gradientn('Variance', colours = colors) + #limits = c(0, 1)) +
  geom_sf(data = lg.parks, fill = NA, color = "black") + 
  geom_sf(data = canada, fill = NA, color = "black") + 
  annotation_scale(location = "bl", width_hint = 0.5) +
  annotation_north_arrow(location = "bl", which_north = "true", 
                         pad_x = unit(0.75, "in"), pad_y = unit(0.5, "in"),
                         style = north_arrow_fancy_orienteering) +
  theme_void() +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.title.x=element_blank(),
        axis.title.y=element_blank())

单独绘制底图显示正常,但叠加后效果不符合预期,无法实现底图与原绘图的正常叠加。

数据结构与可复现代码

数据结构

head(results)
     lat     long  park ecozone        var    mean_res      mean       cv
1 69.425 -125.025 FALSE     ARC 0.02040808 -0.15004042 0.2764668 0.682502
2 72.125 -124.125  TRUE     ARC 0.03036255 -0.07685251 0.1612495 1.433145
3 73.025 -123.675  TRUE     ARC 0.02992938 -0.07491194 0.1648732 1.381233
4 73.025 -123.225  TRUE     ARC 0.02981253 -0.07340767 0.1551282 1.444258
5 72.575 -122.775  TRUE     ARC 0.02772352 -0.06835325 0.1393356 1.590863
6 72.125 -122.325  TRUE     ARC 0.02867879 -0.05654028 0.1109921 1.988154

results.rast
class       : SpatRaster 
dimensions  : 91, 196, 1  (nrow, ncol, nlyr)
resolution  : 0.45, 0.45  (x, y)
extent      : -141, -52.8, 42.2, 83.15  (xmin, xmax, ymin, ymax)
coord. ref. : WGS 84 / Pseudo-Mercator (EPSG:3857) 
source(s)   : memory
name        :      var 
min value   : 0.000000 
max value   : 0.177362 

可复现代码

library(ggplot2)
library(rgeoboundaries) #for canada shapefile
library(basemaps)
library(tidyterra)
library(terra) #for crop + mask functions

#canada shapefile
canada <- geoboundaries("Canada")

basemaps::set_defaults(map_service = "esri", map_type = "world_terrain_base")

#generate a raster
x <- raster(ncol=50, nrow=50, xmn=-141, xmx=-52, ymn=41, ymx=83)
y <- crop(x, canada)
values(y) <- 1:ncell(y)
y <- mask(y, canada)
z <- as.data.frame(y, xy = TRUE) #convert to dataframe for ggplot

ggplot() +
  #basemap_gglayer(ext = st_bbox(canada)) + 
geom_raster(subset(z, !is.na(layer)), mapping = aes(x, y, fill = layer), interpolate = TRUE) +
  coord_sf(datum = "ESRI:102001") +
  geom_sf(data = canada, fill = NA, color = "black") + 
  theme_void()

环境信息

  • R版本:4.3.3
  • 系统:Ubuntu 22.04.4
  • 已设置basemaps默认参数:basemaps::set_defaults(map_service = "esri", map_type = "world_terrain_base")

不确定是包的问题还是操作问题,寻求解决方法。

内容的提问来源于stack exchange,提问作者rsmarcus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:25:56