使用terra绘制SpatVector属性时,如何按指定顺序排列图例
解决terra::plot图例顺序与因子层级不符的问题
问题根源
terra::plot() 绘制分类因子时,图例默认按标签的字母顺序排序,而非你通过cut()定义的逻辑优先级。比如你设置的标签里,"100 (Very High)"以数字"1"开头,字母排序会把它放在最前面,导致图例顺序和预期的Low→Moderate→High→Very High不符。
两种可行解决方案
方案1:绘图时手动指定图例顺序
在plot()函数中用categories参数直接指定想要的顺序,无需修改原数据:
library(geodata) library(terra) shp <- geodata::gadm('FRA', level = 1, path = getwd()) shp$value <- c(1, 10, 22, 30, 44, 50, 60, 70, 80, 100) shp$cut_hazard <- cut(shp$value, breaks = c(-Inf, 29, 69, 99, +Inf), labels = c("1-29 (Low)", "30-69 (Moderate)", "70-99 (High)","100 (Very High)"), include.lowest = T, right = T) # 手动指定图例展示顺序 terra::plot(shp, "cut_hazard", categories = c("1-29 (Low)", "30-69 (Moderate)", "70-99 (High)","100 (Very High)"))
方案2:将字段设为有序因子
从数据层面定义因子的层级顺序,后续所有基于该字段的操作都会遵循这个逻辑:
# 在生成cut_hazard后,转换为有序因子 shp$cut_hazard <- factor(shp$cut_hazard, levels = c("1-29 (Low)", "30-69 (Moderate)", "70-99 (High)","100 (Very High)"), ordered = TRUE) # 直接绘图,图例自动按设定顺序显示 terra::plot(shp, "cut_hazard")
选择建议
- 临时调整图例用方案1,操作简单;
- 若后续还会用到该字段的顺序逻辑,优先选方案2,从根源统一规则。
内容的提问来源于stack exchange,提问作者89_Simple
相关产品推荐
相关产品推荐

