Terra处理多分类栅格异常:绘图提示未知分类求解决方案
Terra绘制分类栅格报错:
unknown categories in raster values 解决思路 问题描述
使用Terra包处理基岩类型分类栅格,该栅格的SpatRaster属性信息如下:
class : SpatRaster dimensions : 4346, 5235, 1 (nrow, ncol, nlyr) resolution : 0.008333333, 0.008333333 (x, y) extent : -10.62514, 32.99986, 34.99986, 71.21653 (xmin, xmax, ymin, ymax) coord. ref. : lon/lat WGS 84 (EPSG:4326) source : lithology.tif categories : xx name : xx min value : sc max value : ig
执行plot(x)命令绘制栅格时触发报错:
plot(x) #[plot] unknown categories in raster values
该问题导致后续依赖此栅格的模型均无法正常运行。
R会话及Terra相关版本信息:
R version 4.3.2 (2023-10-31) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Ubuntu 20.04.6 LTS Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3.10.3 LAPACK: /usr/lib/x86_64-linux-gnu/atlas/liblapack.so.3.10.3; LAPACK version 3.9.0 locale: [1] LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=C LC_TIME=fr_FR.UTF-8 [4] LC_COLLATE=fr_FR.UTF-8 LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8 [7] LC_PAPER=fr_FR.UTF-8 LC_NAME=C LC_ADDRESS=C [10] LC_TELEPHONE=C LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Paris tzcode source: system (glibc) attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] terra_1.7-71 sf_1.0-15 abind_1.4-5 loaded via a namespace (and not attached): [1] vctrs_0.6.5 cli_3.6.2 rlang_1.1.3 DBI_1.2.1 processx_3.8.3 [6] KernSmooth_2.23-22 generics_0.1.3 glue_1.7.0 e1071_1.7-14 pkgbuild_1.4.3 [11] ps_1.7.6 fansi_1.0.6 grid_4.3.2 tibble_3.2.1 classInt_0.4-10 [16] lifecycle_1.0.4 compiler_4.3.2 dplyr_1.1.4 codetools_0.2-19 pkgconfig_2.0.3 [21] Rcpp_1.0.12 rstudioapi_0.15.0 R6_2.5.1 tidyselect_1.2.0 utf8_1.2.4 [26] class_7.3-22 parallel_4.3.2 pillar_1.9.0 curl_5.2.0 callr_3.7.3 [31] magrittr_2.0.3 tools_4.3.2 proxy_0.4-27 units_0.8-5 remotes_2.4.2.1 [36] desc_1.4.3 terra::gdal(lib="") gdal proj geos "3.4.3" "8.2.0" "3.10.2"
解决思路
1. 检查分类映射一致性
- 执行
unique(x)获取栅格中的所有唯一值,再用cats(x)查看已定义的分类映射,确认两者是否完全匹配。如果unique(x)中存在cats(x)未包含的值,就会触发该报错。 - 若发现缺失分类,手动补充:通过
cats(x)[[1]]获取分类数据框,添加缺失的行后用cats(x) <- new_cats更新分类映射。
2. 修复损坏的分类信息
- 若分类信息损坏,尝试重新构建分类:
# 提取唯一值并创建分类映射 unique_vals <- unique(x) new_cats <- data.frame(value = unique_vals, category = as.character(unique_vals)) # 重新设置分类 x <- as.factor(x) cats(x) <- new_cats
3. 验证栅格文件完整性
- 用
x <- rast("lithology.tif")重新加载栅格文件,再次检查属性和分类信息,确认文件未损坏。 - 若文件本身存在问题,可尝试用GDAL命令行工具修复:
gdal_translate lithology.tif fixed_lithology.tif,再读取修复后的文件。
4. 版本兼容性排查
- 执行
install.packages("terra")升级Terra到最新版本,新版本可能修复了分类栅格的绘图bug。 - 若升级Terra后仍有问题,Ubuntu环境下可通过
sudo apt-get update && sudo apt-get install libgdal-dev更新GDAL库,验证版本兼容性。
5. 临时绕过分类绘图
- 若需紧急绘图,可先将栅格转为普通数值型:
plot(as.numeric(x)),但这只是临时方案,仍需修复分类信息以解决后续模型依赖问题。
内容的提问来源于stack exchange,提问作者Alexy ROSA
相关产品推荐
相关产品推荐

