修正Leaflet图例:将彩色方块改为对应样式线条
解决方案
你的问题出在默认的addLegend生成的是填充方块,但你的图层都是无填充的多边形边框(fill=FALSE),需要让图例显示匹配的线条样式(颜色、线宽、虚线)。
修改你的addLegend代码,指定符号类型为线条,并配置对应图层的样式参数:
# 替换原有的addLegend部分 addLegend(position = "bottomright", colors = c("#000000", "#0000FF", "#FF0000"), labels = c("Blocks 2000", "Tracts 2000", "Tracts 2010"), title = "Legend", symbol = "line", # 将图例符号设为线条 weight = c(0.5, 3, 3), # 对应三个图层的线宽 dashArray = c("2", "", "5,5"), # 对应三个图层的虚线样式,空字符串为实线 fill = FALSE # 禁用填充,只显示线条 )
关键参数说明:
symbol = "line":告诉Leaflet生成线条样式的图例项,而非默认的填充方块weight:按顺序匹配三个图层的线宽(Blocks 2000为0.5,两个Tracts图层为3)dashArray:按顺序匹配虚线规则(Blocks 2000为"2",Tracts 2000为空字符串即实线,Tracts 2010为"5,5")fill = FALSE:确保图例项没有填充色,只显示边框线条
修改后的完整地图代码如下:
az_2000 <- tracts(state = "Arizona", year = 2000) %>% select(c(CTIDFP00)) %>% rename("geoid" = "CTIDFP00") az_2000 <- st_transform(az_2000, 4326) az_bg2000 <- blocks(state = "Arizona", year = 2000) %>% select(c(BLKIDFP00)) %>% rename("geoid" = "BLKIDFP00") az_bg2000 <- st_transform(az_bg2000, 4326) # 显式指定CRS,和其他图层保持一致 az_2010 <- tracts(state = "Arizona", year = 2010) %>% select(c(GEOID10)) %>% rename("geoid" = "GEOID10") az_2010 <- st_transform(az_2010, 4326) # Create a map with the three layers map <- leaflet() %>% addTiles() %>% addPolygons(data = az_bg2000, fill = FALSE, color = "#000000", dashArray = "2", weight = 0.5, label = "Blocks 2000") %>% addPolygons(data = az_2000, fill = FALSE, color = "#0000FF", weight = 3, label = "Tracts 2000") %>% addPolygons(data = az_2010, fill = FALSE, color = "#FF0000", dashArray = "5,5", weight = 3, label = "Tracts 2010") %>% addLegend(position = "bottomright", colors = c("#000000", "#0000FF", "#FF0000"), labels = c("Blocks 2000", "Tracts 2000", "Tracts 2010"), title = "Legend", symbol = "line", weight = c(0.5, 3, 3), dashArray = c("2", "", "5,5"), fill = FALSE)
另外注意:原代码中az_bg2000的st_transform未指定CRS,建议显式设置为4326,避免潜在的坐标系不匹配问题。
内容的提问来源于stack exchange,提问作者tchoup
相关产品推荐
相关产品推荐

