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

在ggplot中绘制裁剪后DEM栅格遇到的技术问题

问题:裁剪掩膜后的DEM栅格在ggplot2中无法正确渲染连续值

问题现象

  • 原始DEM栅格使用plot()或ggplot()均可正常可视化
  • 经terra::crop()和terra::mask()裁剪掩膜至目标多边形后,生成的dem.mask对象的最小/最大值显示为NA
  • 调用ggplot2::ggplot() + tidyterra::geom_spatraster(dem.mask)绘图时,仅能显示3个离散值和NA,无法呈现栅格实际的连续值范围
  • 添加tidyterra::scale_fill_terrain_c()后触发错误:向连续比例尺提供离散值

重现代码

# 掩膜多边形对象(dogwood.sf)
structure(list(Array = "Dogwood", bbox = structure(list(structure(list(
    structure(c(456582.484888111, 459612.80088017, 459612.80088017, 
    456582.484888111, 456582.484888111, 4038674.29664676, 4038674.29664676, 
    4041198.55641265, 4041198.55641265, 4038674.29664676), dim = c(5L, 
    2L))), class = c("XY", "POLYGON", "sfg"))), class = c("sfc_POLYGON", 
"sfc"), precision = 0, bbox = structure(c(xmin = 456582.484888111, 
ymin = 4038674.29664676, xmax = 459612.80088017, ymax = 4041198.55641265
), class = "bbox"), crs = structure(list(input = "EPSG:26915", 
    wkt = "PROJCRS[\"NAD83 / UTM zone 15N\",\n    BASEGEOGCRS[\"NAD83\",\n        DATUM[\"North American Datum 1983\",\n            ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n                LENGTHUNIT[\"metre\",1]]],\n        PRIMEM[\"Greenwich\",0,\n            ANGLEUNIT[\"degree\",0.0174532925199433]],\n        ID[\"EPSG\",4269]],\n    CONVERSION[\"UTM zone 15N\",\n        METHOD[\"Transverse Mercator\",\n            ID[\"EPSG\",9807]],\n        PARAMETER[\"Latitude of natural origin\",0,\n            ANGLEUNIT[\"degree\",0.0174532925199433],\n            ID[\"EPSG\",8801]],\n        PARAMETER[\"Longitude of natural origin\",-93,\n            ANGLEUNIT[\"degree\",0.0174532925199433],\n            ID[\"EPSG\",8802]],\n        PARAMETER[\"Scale factor at natural origin\",0.9996,\n            SCALEUNIT[\"unity\",1],\n            ID[\"EPSG\",8805]],\n        PARAMETER[\"False easting\",500000,\n            LENGTHUNIT[\"metre\",1],\n            ID[\"EPSG\",8806]],\n        PARAMETER[\"False northing\",0,\n            LENGTHUNIT[\"metre\",1],\n            ID[\"EPSG\",8807]]],\n    CS[Cartesian,2],\n        AXIS[\"(E)\",east,\n            ORDER[1],\n            LENGTHUNIT[\"metre\",1]],\n        AXIS[\"(N)\",north,\n            ORDER[2],\n            LENGTHUNIT[\"metre\",1]],\n    USAGE[\n        SCOPE[\"Engineering survey, topographic mapping.\"],\n        AREA[\"North America - between 96°W and 90°W - onshore and offshore. Canada - Manitoba; Nunavut; Ontario. United States (USA) - Arkansas; Illinois; Iowa; Kansas; Louisiana; Michigan; Minnesota; Mississippi; Missouri; Nebraska; Oklahoma; Tennessee; Texas; Wisconsin.\"],\n        BBOX[25.61,-96,84,-90]],\n    ID[\"EPSG\",26915]]"), class = "crs"), n_empty = 0L)), row.names = c(NA, 
-1L), sf_column = "bbox", agr = structure(c(Array = NA_integer_), levels = c("constant", 
"aggregate", "identity"), class = "factor"), class = c("sf", 
"tbl_df", "tbl", "data.frame"))

# DEM栅格对象(名为DEM)
terra::crop(DEM, dogwood.sf) -> dem.crop
terra::mask(dem.crop, dogwood.sf) -> dem.mask

# 可正常渲染
terra::plot(dem.mask)

# 无法正确显示连续值
ggplot2::ggplot() +
  tidyterra::geom_spatraster(dem.mask)

# 查看栅格对象,min/max为NA
dem.mask

# 查看值,实际存在连续范围
terra::values(dem.mask)

# 添加连续比例尺报错
ggplot2::ggplot() +
  tidyterra::geom_spatraster(dem.mask) +
  tidyterra::scale_fill_terrain_c()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:17:10