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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:33:24