重新排序 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)
有没有办法使用 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)