重新排序 terra SpatVector 地图中的图例类别

Reorder plot legend categories in a terra SpatVector map

有没有办法使用 terra 包的 SpatVector 地图按特定顺序排列图例类别?示例:

library(terra)
v <- vect(system.file("ex/lux.shp", package="terra"))
head(v)
plot(v, "NAME_1")

我们如何才能让“卢森堡”首先出现在图例中,并且其余类别也按照用户指定的顺序出现?我们已尝试将“NAME_1”列转换为因子,但它仍被解释为字符。

我有一个有点棘手的解决方案。您可以使用基本 R legend 函数在绘图中手动设置图例。您可以使用以下代码:

library(terra)
v <- vect(system.file("ex/lux.shp", package="terra"))
head(v)
plot(v, "NAME_1")
legend("topright", legend = c("Luxembourg", "Grevenmacher", "Diekrich"), fill = c("green", "blue", "deeppink"), bty = "n")

输出:

您可以使用参数sort=FALSE。在这种情况下,图例将与 unique("fieldname")

返回的顺序相同

示例数据

library(terra)
v <- vect(system.file("ex/lux.shp", package="terra"))

如果我们想按字母顺序映射“NAME_1”,除了顶部的“卢森堡”,您可以这样做

# make sure names are sorted 
v <- v[order(v$NAME_1), ]
# put Luxembourg on top
vv <- rbind(v[v$NAME_1 == "Luxembourg", ], v[v$NAME_1 != "Luxembourg", ])

plot(vv, "NAME_1", sort=FALSE)


terra 版本 1.5.38(当前为开发版本)现在有以下两个附加选项:

降序排列

plot(v, "NAME_2", decreasing=TRUE)

按指定顺序排序(或随机排序,如本例所示)

set.seed(66)
u <- unique(v$NAME_2) |> sample()
plot(v, "NAME_2", sort=u)