鼠标掠过填充区域时高亮显示边框-传单-R
在@TimSalabim的指导下,我分离了我的邻域多边形的边界和填充,以便使用zIndex对它们进行适当的排序 如果我将鼠标掠过填充区域时高亮显示边框-传单-R,r,leaflet,R,Leaflet,在@TimSalabim的指导下,我分离了我的邻域多边形的边界和填充,以便使用zIndex对它们进行适当的排序 如果我将highlightOptions()函数放在addPolygons(邻域填充)函数中,我不知道如何在鼠标悬停时增加多边形的边界 如果我将highlightOptions()函数放在addPolylines(邻域边界)函数中,我可以小心地将鼠标移到边界上,宽度会增加。这就是我想要的行为,当我用鼠标在附近的任何地方移动时 现在我已经分离了多边形的填充和边界,当我将鼠标移到填充区域
highlightOptions()
函数放在addPolygons(邻域填充)
函数中,我不知道如何在鼠标悬停时增加多边形的边界
如果我将highlightOptions()
函数放在addPolylines(邻域边界)
函数中,我可以小心地将鼠标移到边界上,宽度会增加。这就是我想要的行为,当我用鼠标在附近的任何地方移动时
现在我已经分离了多边形的填充和边界,当我将鼠标移到填充区域上时,如何增加边界宽度
# Add hood borders
addPolylines(data = borders,
color = "white",
opacity = 1,
weight = 2,
options = pathOptions(pane = "hood_borders")) %>%
# Add hood fill
addPolygons(data = hood_shp,
fillColor = ~pal(be_per_cap),
fillOpacity = 1.0,
color = NA,
options = pathOptions(pane = "hoods",
# Highlight neighbourhoods upon mouseover - NOT CORRECT
highlight = highlightOptions(
stroke = 4),
# Add label info when mouseover
label = labels,
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px",
direction = "auto")))
按照世嘉的建议,我修改了代码。看见邻里之间的边界并不模糊,悬停时边界确实扩大了。但是,当鼠标离开时,边框不会恢复到其原始宽度。为什么呢
leaflet(options = leafletOptions(minZoom = 11, maxZoom = 16), width = "100%") %>%
addTiles() %>%
# Raster image surrounding Toronto
addProviderTiles(providers$OpenStreetMap.BlackAndWhite) %>%
# Center map north of Toronto City Hall slightly zoomed in
setView(map,
lng = -79.384293,
lat = 43.685, #43.653908,
zoom = 12) %>%
# Vector neighbourhoods
addPolygons(data = hood_shp,
fillColor = ~pal(be_per_cap),
color = NA,
fillOpacity = 1,
# Highlight neighbourhoods upon mouseover
highlight = highlightOptions(
weight = 3,
fillOpacity = 0,
color = "black",
opacity = 1.0,
bringToFront = TRUE,
sendToBack = TRUE),
# # Add label info when mouseover
label = labels,
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px",
direction = "auto")) %>%
# Add highways
addPolygons(data = xway,
color = "sienna",
weight = 1.0,
opacity = 1.0,
fillOpacity = 0.7) %>%
# Add major arterial
addPolygons(data = mart,
color = "#737373",
weight = 1.0,
opacity = 1.0,
fillOpacity = 1.0) %>%
# Add parks
addPolygons(data = parks,
color = "green",
weight = 1.0,
opacity = 1.0,
fillOpacity = 1.0,
options = pathOptions(clickable = FALSE)) %>%
# Add border
addPolylines(data = hood_shp,
color = "black",
stroke = TRUE,
opacity = 1,
weight = 1) %>%
# Add legend
addLegend(data = hood_shp,
colors =c("#AA122E", "#F4AE7E", "#FEFDB7"),
labels= c("More", "", "Less"),
opacity = 1.0,
title = "B&Es",
position = "bottomright")
我不确定我是否正确理解了您的问题,但如果您只想增加带有传单的多边形的边界,则Highlight选项是正确的选择,但不应将其放置在pathOptions中
- 以下示例使用带有高亮选项的
作为邻域。在这些模型中,您可以定义鼠标悬停时邻居的行为。使用addPolygons
参数定义边框大小weight
- 公园也会进入
,但带有添加多边形
您使它们不可读取,因此 不要与鼠标事件交互选项= pathooptions(clickable=FALSE)
- 而边框进入
,无需任何进一步的修改 选项添加多段线
library(sp)
Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
hood_shp = SpatialPolygons(list(Srs1,Srs2), 1:2)
hood_shp <- SpatialPolygonsDataFrame(hood_shp, data=data.frame(be_per_cap = 1:length(hood_shp)), match.ID = F)
parks = Polygon(cbind(c(2,3,3,1,2),c(1,2,4,3,1)))
parks = SpatialPolygons(list(Polygons(list(parks), "parks")))
xway = Polygon(cbind(c(1,5,5,1,3),c(3,5,5,3,1)))
xway = SpatialPolygons(list(Polygons(list(xway), "xway")))
library(shiny)
library(leaflet)
library(htmlwidgets)
ui <- fluidPage(
leafletOutput("map")
)
server <- function(input, output) {
output$map <- renderLeaflet({
pal = colorBin("Blues", hood_shp$be_per_cap)
leaflet(width = "100%") %>%
addTiles() %>%
# Raster image surrounding Toronto
addProviderTiles(providers$OpenStreetMap.BlackAndWhite) %>%
# Vector neighbourhoods
addPolygons(data = hood_shp,
fillColor = ~pal(be_per_cap),
color = "transparent",
fillOpacity = 1,
# Highlight neighbourhoods upon mouseover
highlight = highlightOptions(
weight = 3,
fillOpacity = 0,
color = "black",
opacity = 1.0,
bringToFront = TRUE,
sendToBack = TRUE),
# # Add label info when mouseover
label = "labels",
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px",
direction = "auto")) %>%
# Add parks
addPolygons(data = parks,
color = "green",
weight = 1.0,
opacity = 1.0,
fillOpacity = 1.0,
options = pathOptions(clickable = FALSE)) %>%
# Add highways
addPolygons(data = xway,
color = "sienna",
weight = 1.0,
opacity = 1.0,
fillOpacity = 0.7) %>%
# Add border
addPolylines(data = hood_shp,
color = "black",
stroke = TRUE,
opacity = 1,
weight = 1) %>%
# Add legend
addLegend(data = hood_shp,
colors =c("#AA122E", "#F4AE7E", "#FEFDB7"),
labels= c("More", "", "Less"),
opacity = 1.0,
title = "B&Es",
position = "bottomright")
})
}
shinyApp(ui, server)
库(sp)
Sr1=多边形(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2=多边形(cbind(c(5,4,2,5),c(2,3,2,2)))
Srs1=多边形(列表(Sr1),“s1”)
Srs2=多边形(列表(Sr2),“s2”)
hood_shp=空间多边形(列表(Srs1,Srs2),1:2)
胡德_shp%
#增加公园
添加多边形(数据=公园,
color=“绿色”,
重量=1.0,
不透明度=1.0,
fillOpacity=1.0,
选项=选项(可点击=错误))%>%
#增加公路
添加多边形(数据=xway,
color=“sienna”,
重量=1.0,
不透明度=1.0,
填充不透明度=0.7)%>%
#添加边框
添加多段线(数据=发动机罩,
color=“黑色”,
笔划=真,
不透明度=1,
重量=1)%>%
#添加图例
addLegend(数据=发动机罩,
颜色=c(“#AA122E”、“#F4AE7E”、“#FEFDB7”),
标签=c(“更多”、“更少”),
不透明度=1.0,
title=“B&Es”,
position=“bottomright”)
})
}
shinyApp(用户界面、服务器)
如果您将一个小的可复制示例包含在一些虚拟数据中,解决它会更容易。如果不使用图层,我可以突出显示边框。请参阅:但是,我认为我需要使用图层,这样“公园”图层就不会模糊白色的邻里边界。这有意义吗?我编辑了我的答案。也许这就是你想要的?我试着以你为例并加以应用。我不清楚如何控制图层顺序。另外,我用我的修改修改了我原来的问题。我仍然有一个问题,就是鼠标离开后,边框不能恢复到原来的宽度。这对我很有效。在附近的高亮选项中尝试使用weight=10
。你想要的行为是什么?什么是可点击的,什么是刚刚显示的?理想的行为是在悬停时加宽黑色边框,并在鼠标离开时将边框宽度恢复到其原始状态。我认为,当边界位于绿色公园上方时,这种方法非常有效。但是当边界没有在公园上方时,当我在盘旋后将鼠标移出时,它看起来就不同了。这有意义吗?无需单击。