Hug*_*ock 11 r legend leaflet shiny
我正在尝试创建一个由变量大小调整的小册子地图.是否可以使用不同大小的圆圈创建表示不同变量值的图例?我发现另一篇文章展示了如何在图例中将方块转换为圆圈,但我不确定如何更改图例中不同圆圈的大小.
例如,这是一个虚拟脚本,它创建了与2个变量类(5和10)相关的10个点.我想要一个带有两个圆圈的图例,其大小与使用半径为5和10的addCircleMarkers指定的相同.如果有人可以修改以创建我想要的东西,我将非常感激!谢谢!
library(shiny)
library(leaflet)
#create data
Points<-data.frame(x=runif(10,20,21), y=runif(10,0,1), var=rep(c(5,10),5))
map = leaflet() %>% addTiles()
# Set up shiny app
shinyApp(ui=bootstrapPage(
tags$style(type = "text/css", "html, body {width:100%;height:100%}",
".leaflet .legend i{
border-radius: 50%;
width: 10px;
height: 10px;
margin-top: 4px;
}
"
),
leafletOutput("myMap", width = "100%", height = "100%")),
server= function(input, output){
output$myMap = renderLeaflet({map %>%
addCircleMarkers(Points$x,Points$y,radius=Points$var) %>%
addLegend(colors=rep("blue",2), labels=c(5,10))
})
})
Run Code Online (Sandbox Code Playgroud)
K. *_*hde 16
你很幸运.仔细查看leaflet.js显示在addLegend命令中添加的配置,用于创建图例项目:
1083 - 1086行
leaflet.js:Run Code Online (Sandbox Code Playgroud)for (var i = 0; i < colors.length; i++) { legendHTML += '<i style="background:' + colors[i] + ';opacity:' + options.opacity + '"></i> ' + labels[i] + '<br/>'; }
这样,我们可以潜入一些额外的造型.在colors争论中,我们添加一些width并height改变i标签的大小(=图例圆圈).并且(这是可选的)我们可以使用修改后的对齐样式来制作labelsa div,因为如果圆圈变大,它们往往会卡在线的顶部.
我冒昧地为您创建了一个自定义图例功能.这会为圆形大小带来额外的值.(对于这一个应用程序来说,它是一个非常小的功能.)然后它添加了我上面提到的样式,而不需要担心拼写错误或其他错误.请注意,标准尺寸为10.
代码如下.玩得开心!如果有任何错误或错误,请写.我无法测试每种可能的情况.
library(shiny)
library(leaflet)
#create data
Points<-data.frame(x=runif(10,20,21), y=runif(10,0,1), var=rep(c(5,10),5))
map = leaflet() %>% addTiles()
# Set up shiny app
shinyApp(
ui = bootstrapPage(
tags$style(type = "text/css", "html, body {width:100%;height:100%}",
".leaflet .legend i{
border-radius: 50%;
width: 10px;
height: 10px;
margin-top: 4px;
}
"),
leafletOutput("myMap", width = "100%", height = "100%")
),
server = function(input, output){
addLegendCustom <- function(map, colors, labels, sizes, opacity = 0.5){
colorAdditions <- paste0(colors, "; width:", sizes, "px; height:", sizes, "px")
labelAdditions <- paste0("<div style='display: inline-block;height: ", sizes, "px;margin-top: 4px;line-height: ", sizes, "px;'>", labels, "</div>")
return(addLegend(map, colors = colorAdditions, labels = labelAdditions, opacity = opacity))
}
output$myMap = renderLeaflet({map %>%
addCircleMarkers(Points$x,Points$y,radius=Points$var) %>%
addLegendCustom(colors = c("blue", "blue", "red"), labels = c("A", "B", "C"), sizes = c(10, 20, 40))
})
}
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4728 次 |
| 最近记录: |