在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
相关产品推荐
相关产品推荐

