如何在地图视图中为图例设置不均匀序列?
How to set an uneven sequence for legends in mapview?
以下代码创建了一个偶数断点的图例。我怎样才能改变它,使 0-1 的每个值都显示为白色,1-最大值的值显示为 0.5 的中断,并显示渐变色? (换句话说,下面地图的唯一变化是所有值 0-1 都显示为白色)。
Mapview 似乎无法识别 breaks
。我能想到的唯一其他解决方案是拆分数据并制作两个地图,其中一个 SHAPE_LEN
值来自 0-1,第二个 SHAPE_LEN
值来自 1-3.98,并显示两个地图一起。这不是一个理想的解决方案,因为我必须显示 2 个图例。
非常感谢!
library(leaflet)
library(mapview)
pink2 = colorRampPalette(c('white', 'deeppink'))
mapview(franconia, alpha.regions = 1, map.types = 'CartoDB.Positron',
layer.name = 'Franconia', zcol = 'SHAPE_LEN',
col.regions = pink2, at = seq(0, 4, .05))
如果您不介意使用leaflet 包而不是mapview 包,您可以采用以下方法。您需要的是使用 colorRampPalette 创建自定义颜色。按照您的方式,您只是在两种颜色之间插入颜色 space。您实际上可以指定要创建多少种颜色。这里我创建了两个颜色spaces。第一个仅用于白色,第二个用于白色和 deeppink2 之间的颜色 space。我组合了这两个颜色向量并创建了 rampcols
。我用这个为传单创建了颜色。最后,我给你画了一张地图。我不熟悉 mawview。但如果您可以使用相同的方法,那可能是最适合您的方案。否则,这足以让您继续您的项目。
library(mapview)
library(leaflet)
# Make vector of colors for values between 0 and 1 (10 colors)
# You may have to change the number of colors depending on your situation.
rc1 <- colorRampPalette(colors = c("white", "white"), space = "Lab")(10)
# Make vector of colors for values between 1 and 4 (30 colors)
# You may have to change the number of colors depending on your situation.
rc2 <- colorRampPalette(colors = c("white", "deeppink2"), space = "Lab")(30)
# Combine the two color palettes
rampcols <- c(rc1, rc2)
mypal <- colorNumeric(palette = rampcols, domain = franconia$SHAPE_LEN
# Draw a map
leaflet() %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = franconia, group = "Franconia",
stroke = FALSE, smoothFactor = 0.2, fillOpacity = 1,
fillColor = ~mypal(franconia$SHAPE_LEN),
popup = paste("Region: ", franconia$NAME_ASCI, "<br>",
"Value: ", franconia$SHAPE_LEN, "<br>")) %>%
addLayersControl(overlayGroups = "Franconia") %>%
addLegend(position = "bottomright", pal = mypal, values = franconia$SHAPE_LEN,
title = "Franconia",
opacity = 1)
以下代码创建了一个偶数断点的图例。我怎样才能改变它,使 0-1 的每个值都显示为白色,1-最大值的值显示为 0.5 的中断,并显示渐变色? (换句话说,下面地图的唯一变化是所有值 0-1 都显示为白色)。
Mapview 似乎无法识别 breaks
。我能想到的唯一其他解决方案是拆分数据并制作两个地图,其中一个 SHAPE_LEN
值来自 0-1,第二个 SHAPE_LEN
值来自 1-3.98,并显示两个地图一起。这不是一个理想的解决方案,因为我必须显示 2 个图例。
非常感谢!
library(leaflet)
library(mapview)
pink2 = colorRampPalette(c('white', 'deeppink'))
mapview(franconia, alpha.regions = 1, map.types = 'CartoDB.Positron',
layer.name = 'Franconia', zcol = 'SHAPE_LEN',
col.regions = pink2, at = seq(0, 4, .05))
如果您不介意使用leaflet 包而不是mapview 包,您可以采用以下方法。您需要的是使用 colorRampPalette 创建自定义颜色。按照您的方式,您只是在两种颜色之间插入颜色 space。您实际上可以指定要创建多少种颜色。这里我创建了两个颜色spaces。第一个仅用于白色,第二个用于白色和 deeppink2 之间的颜色 space。我组合了这两个颜色向量并创建了 rampcols
。我用这个为传单创建了颜色。最后,我给你画了一张地图。我不熟悉 mawview。但如果您可以使用相同的方法,那可能是最适合您的方案。否则,这足以让您继续您的项目。
library(mapview)
library(leaflet)
# Make vector of colors for values between 0 and 1 (10 colors)
# You may have to change the number of colors depending on your situation.
rc1 <- colorRampPalette(colors = c("white", "white"), space = "Lab")(10)
# Make vector of colors for values between 1 and 4 (30 colors)
# You may have to change the number of colors depending on your situation.
rc2 <- colorRampPalette(colors = c("white", "deeppink2"), space = "Lab")(30)
# Combine the two color palettes
rampcols <- c(rc1, rc2)
mypal <- colorNumeric(palette = rampcols, domain = franconia$SHAPE_LEN
# Draw a map
leaflet() %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = franconia, group = "Franconia",
stroke = FALSE, smoothFactor = 0.2, fillOpacity = 1,
fillColor = ~mypal(franconia$SHAPE_LEN),
popup = paste("Region: ", franconia$NAME_ASCI, "<br>",
"Value: ", franconia$SHAPE_LEN, "<br>")) %>%
addLayersControl(overlayGroups = "Franconia") %>%
addLegend(position = "bottomright", pal = mypal, values = franconia$SHAPE_LEN,
title = "Franconia",
opacity = 1)