使用R的levelplot绘制分类栅格时图例仅显示数字ID而非分类类别
解决levelplot绘制分类栅格时图例显示数字ID的问题
问题核心是rasterVis::levelplot默认读取栅格属性表(RAT)里的ID列作为图例标签,你自定义的legend列不会被自动识别。以下是两种可行的解决方法:
方法一:修改属性表列名为默认识别的names
将分类标签列名改为names,levelplot会自动读取这一列作为图例文本:
library(raster) library(rasterVis) r <- raster(ncol=10, nrow=10) values(r) <- rep(1:4, each=25) r <- ratify(r) rat <- levels(r)[[1]] rat$names <- c("Class A", "Class B", "Class C", "Class D") # 修改列名为names levels(r) <- rat rasterVis::levelplot(r)
方法二:手动指定图例标签
如果不想修改属性表结构,可以在levelplot中通过colorkey参数手动设置图例的刻度和对应标签:
library(raster) library(rasterVis) r <- raster(ncol=10, nrow=10) values(r) <- rep(1:4, each=25) r <- ratify(r) rat <- levels(r)[[1]] rat$legend <- c("Class A", "Class B", "Class C", "Class D") levels(r) <- rat # 自定义colorkey的标签映射 rasterVis::levelplot(r, colorkey=list( labels=list( at=1:4, # 对应栅格的数字ID labels=rat$legend # 替换为自定义分类名称 ) ))
原因说明
ratify()生成的默认属性表仅包含ID列,levelplot默认以此列作为图例显示内容。只有当属性表中存在names列时,才会自动用该列文本替代数字ID;否则需要手动指定标签映射关系。
内容的提问来源于stack exchange,提问作者majordanby
相关产品推荐
相关产品推荐

