R Leaflet:二元变量的图例

3

我已经成功地在我的 Leaflet 地图上添加了一个图例,并针对二进制变量进行了特殊处理。不过,我想让这些二进制变量的图例看起来更好。这个问题嵌入在一个更大的 Shiny 应用程序中,但我将简化它:

dat <- data.frame("lat"=c(28.8,28.7,28.6,28.5),
                  "lon"=c(77.1,77.2,77.3,77.4),
                  "hiv"=c(0,0,1,1))
colorBy <- "hiv" #just in this example
colorData <- dat[,colorBy]
if(length(unique(colorData)) == 2) pal <- colorBin(c("black","red"), colorData, 2, pretty=F )
else pal <- colorBin(c("red","black"), colorData, 5, pretty=F)

leaflet(dat) %>% 
 addTiles() %>%
  addCircleMarkers(~lon, ~lat, stroke=F,
                   fillOpacity = .6, color = coloring(), radius=radii) %>%
  addLegend("bottomright", pal=pal, values=colorData,
            title=colorBy, opacity=1, layerId="legend")

现在,地图和图例看起来是这样的:Map with binary legend

但是,我真的希望它能显示颜色旁边的“0”和“1”,而不是“0.0-0.5”和“0.5-1.0”。有任何想法如何自定义它吗?


您的示例在我的电脑上无法运行。coloring() 函数在哪里定义? - symbolrush
这是我程序中更为复杂的一个函数,但它与图例问题无关。如果你将 color = "black" 替换进去,它应该可以运行,你就能看到图例的问题了。 - Kira Tebbe
1个回答

1
使用colorFactor()替代colorBin()colorFactor将保留数据级别,即01colorBin将数据分为两个区间:0-0.50.5-1
library(leaflet)

dat <- data.frame("lat"=c(28.8,28.7,28.6,28.5),
                  "lon"=c(77.1,77.2,77.3,77.4),
                  "hiv"=c(0,0,1,1))
colorBy <- "hiv" #just in this example
colorData <- dat[,colorBy]
if(length(unique(colorData)) == 2){
  pal <- colorFactor(c("black","red"), colorData)
}else{
  pal <- colorFactor(c("red","black"), colorData)
}

leaflet(dat) %>% 
  addTiles() %>%
  addCircleMarkers(~lon, ~lat, stroke=F,
                   fillOpacity = .6, color = "black") %>%
  addLegend("bottomright", pal=pal, values=colorData,
            title=colorBy, opacity=1, layerId="legend")

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接