无法使用 addLegend(labels) 在 R 中的传单中添加分类图例
Failed to add a categorical legend in leaflet in R using addLegend(labels)
这个问题的所有文件都在以下
git:
我正在尝试在带有分类的传单中绘制分类地图
将字符向量显示为标签的图例:
加载包
首先我加载所需的包
library(rgdal)
library(raster)
library(kableExtra)
library(rasterVis)
library(leaflet)
然后我加载所需的数据集
Codes <- readRDS("Codes.rds")
LandCover <- readRDS("LandCover.rds")
如果我们查看土地覆被栅格,它是一个分类栅格,我
用栅格包
中的 ratify
制作
LandCover
## class : RasterLayer
## dimensions : 832, 680, 565760 (nrow, ncol, ncell)
## resolution : 30.00002, 29.99993 (x, y)
## extent : 288800.8, 309200.8, 6367272, 6392231 (xmin, xmax, ymin, ymax)
## crs : +proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
## source : memory
## names : LC_CHILE_2014_b
## values : 150, 932 (min, max)
## attributes :
## ID names IDs
## from: 150 Cultivos 150
## to : 932 Suelos rocosos 932
我想将名称属性作为图例
使用 rasterVis 包中的 levelplot
函数工作:
rasterVis::levelplot(LandCover)
数据也在代码中重复data.frame如果有效
kable(Codes, caption = "Tabla de atributos del mapa") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
地图属性表
代码
已选
150
栽培品种
212
Nativo de Hoja Ancha
251
植物园
330
糕点
450
马托拉莱斯
510
休谟目
640
库尔波德阿瓜
800
地表不透水
920
棕榈树
932
苏埃洛斯·罗科索斯
两项测试无效
测试 1
pal <- colorFactor(rainbow(10), values(LandCover),
na.color = "transparent")
leaflet() %>% addTiles() %>% addRasterImage(LandCover, colors = pal, opacity = 0.8) %>% addLegend(pal = pal, values = values(LandCover),title = "Land Cover", labels = Codes$Selected)
测试 2
在第二个中,我认为将标签属性添加到
addLegend
函数可以解决问题,但它不起作用
pal <- colorFactor(rainbow(10), values(LandCover),
na.color = "transparent")
leaflet() %>% addTiles() %>% addRasterImage(LandCover, colors = pal, opacity = 0.8) %>% addLegend(pal = pal, values = values(LandCover),title = "Land Cover", labels = Codes$Selected)
您可以通过利用 addLegend
的 labFormat
参数来实现。
诀窍是在 labFormat
中使用 transform
函数将 RAT 的 ID 重新映射到相应的标签。
类似这样的方法似乎有效:
library(rgdal)
library(raster)
library(leaflet)
Codes <- readRDS("C:\Users\LB_laptop\Downloads\Codes.rds")
LandCover <- readRDS("C:\Users\LB_laptop\Downloads\LandCover.rds")
pal <- colorFactor(rainbow(10), values(LandCover),
na.color = "transparent")
leaflet() %>% addTiles() %>%
addRasterImage(LandCover, colors = pal, opacity = 0.8) %>%
addLegend(pal = pal,
values = values(LandCover),
title = "Land Cover",
labFormat = labelFormat(
transform = function(x) {
levels(LandCover)[[1]]$names[which(levels(LandCover)[[1]]$ID == x)]
}))
由 reprex package (v0.3.0)
于 2019-11-30 创建
这个问题的所有文件都在以下 git:
我正在尝试在带有分类的传单中绘制分类地图 将字符向量显示为标签的图例:
加载包
首先我加载所需的包
library(rgdal)
library(raster)
library(kableExtra)
library(rasterVis)
library(leaflet)
然后我加载所需的数据集
Codes <- readRDS("Codes.rds")
LandCover <- readRDS("LandCover.rds")
如果我们查看土地覆被栅格,它是一个分类栅格,我 用栅格包
中的ratify
制作
LandCover
## class : RasterLayer
## dimensions : 832, 680, 565760 (nrow, ncol, ncell)
## resolution : 30.00002, 29.99993 (x, y)
## extent : 288800.8, 309200.8, 6367272, 6392231 (xmin, xmax, ymin, ymax)
## crs : +proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
## source : memory
## names : LC_CHILE_2014_b
## values : 150, 932 (min, max)
## attributes :
## ID names IDs
## from: 150 Cultivos 150
## to : 932 Suelos rocosos 932
我想将名称属性作为图例
使用 rasterVis 包中的 levelplot
函数工作:
rasterVis::levelplot(LandCover)
数据也在代码中重复data.frame如果有效
kable(Codes, caption = "Tabla de atributos del mapa") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
地图属性表
代码
已选
150
栽培品种
212
Nativo de Hoja Ancha
251
植物园
330
糕点
450
马托拉莱斯
510
休谟目
640
库尔波德阿瓜
800
地表不透水
920
棕榈树
932
苏埃洛斯·罗科索斯
两项测试无效
测试 1
pal <- colorFactor(rainbow(10), values(LandCover),
na.color = "transparent")
leaflet() %>% addTiles() %>% addRasterImage(LandCover, colors = pal, opacity = 0.8) %>% addLegend(pal = pal, values = values(LandCover),title = "Land Cover", labels = Codes$Selected)
测试 2
在第二个中,我认为将标签属性添加到
addLegend
函数可以解决问题,但它不起作用
pal <- colorFactor(rainbow(10), values(LandCover),
na.color = "transparent")
leaflet() %>% addTiles() %>% addRasterImage(LandCover, colors = pal, opacity = 0.8) %>% addLegend(pal = pal, values = values(LandCover),title = "Land Cover", labels = Codes$Selected)
您可以通过利用 addLegend
的 labFormat
参数来实现。
诀窍是在 labFormat
中使用 transform
函数将 RAT 的 ID 重新映射到相应的标签。
类似这样的方法似乎有效:
library(rgdal)
library(raster)
library(leaflet)
Codes <- readRDS("C:\Users\LB_laptop\Downloads\Codes.rds")
LandCover <- readRDS("C:\Users\LB_laptop\Downloads\LandCover.rds")
pal <- colorFactor(rainbow(10), values(LandCover),
na.color = "transparent")
leaflet() %>% addTiles() %>%
addRasterImage(LandCover, colors = pal, opacity = 0.8) %>%
addLegend(pal = pal,
values = values(LandCover),
title = "Land Cover",
labFormat = labelFormat(
transform = function(x) {
levels(LandCover)[[1]]$names[which(levels(LandCover)[[1]]$ID == x)]
}))
由 reprex package (v0.3.0)
于 2019-11-30 创建