突出显示 select 项目指向的 R 传单多边形(无需单击它)
Highlight R leaflet polygon pointed by select Item (without cliking on it)
在 R shiny 应用程序上,是否可以制作一张突出显示 select 项目指向的多边形的传单地图(只需将摩丝移至列表上方,无需单击它即可工作)?
在下面的可重现示例中,我希望这个 Shiny 应用突出显示与鼠标光标位置对应的多边形,但无需单击它。
library(shiny)
library(shinyjs)
library(leaflet)
library(sf)
download.file(url = "http://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.zip", destfile = "TM_WORLD_BORDERS-0.3.zip")
unzip( zipfile = "TM_WORLD_BORDERS-0.3.zip" )
world.borders <-read_sf( dsn = getwd(), layer = "TM_WORLD_BORDERS-0.3" )
world.borders <- world.borders[world.borders$NAME %in% c("Australia","United States","Brazil","Ireland","India","Kenya"),]
server <- function(input, output, session) {
output$mymap <- renderLeaflet({
leaflet(options = leafletOptions(maxZoom = 18)) %>% addTiles() %>%
addPolygons( data = world.borders, fill = "#D24618", color = "blue")
})
}
ui <- fluidPage(
leafletOutput("mymap"),
selectInput(inputId = "country_choice",label = "Select a country",choices = unique(world.borders$NAME))
)
shinyApp(ui, server)
非常感谢!
这应该可以解决问题:
library(shiny)
library(shinyjs)
library(leaflet)
library(sf)
### Note had to download by hand as this did not work
## download.file(url = "http://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.zip",
## destfile = "TM_WORLD_BORDERS-0.3.zip")
## unzip( zipfile = "TM_WORLD_BORDERS-0.3.zip" )
world.borders <- read_sf( dsn = getwd(), layer = "TM_WORLD_BORDERS-0.3" )
world.borders <- world.borders[world.borders$NAME %in%
c("Australia", "United States", "Brazil",
"Ireland", "India", "Kenya"), ]
ui <- fluidPage(
useShinyjs(),
leafletOutput("mymap"),
selectInput(inputId = "country_choice",
label = "Select a country",
choices = c("Please Select..." = "", unique(world.borders$NAME)))
)
server <- function(input, output, session) {
runjs(glue::glue("$('.selectize-control').on('mouseenter', ",
"'.selectize-dropdown-content div', ",
"function() {{",
" Shiny.setInputValue('selected', $(this).data('value'));}}); ",
"$('.selectize-control').on('mouseleave', ",
"'.selectize-dropdown-content div', ",
"function() {{",
" Shiny.setInputValue('selected', null);}})"))
output$mymap <- renderLeaflet({
myBorders <- world.borders[world.borders$NAME == input$selected, ]
leaflet(options = leafletOptions(maxZoom = 18)) %>% addTiles() %>%
addPolygons(data = myBorders, fill = "#D24618", color = "blue")
})
}
shinyApp(ui, server)
在 R shiny 应用程序上,是否可以制作一张突出显示 select 项目指向的多边形的传单地图(只需将摩丝移至列表上方,无需单击它即可工作)?
在下面的可重现示例中,我希望这个 Shiny 应用突出显示与鼠标光标位置对应的多边形,但无需单击它。
library(shiny)
library(shinyjs)
library(leaflet)
library(sf)
download.file(url = "http://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.zip", destfile = "TM_WORLD_BORDERS-0.3.zip")
unzip( zipfile = "TM_WORLD_BORDERS-0.3.zip" )
world.borders <-read_sf( dsn = getwd(), layer = "TM_WORLD_BORDERS-0.3" )
world.borders <- world.borders[world.borders$NAME %in% c("Australia","United States","Brazil","Ireland","India","Kenya"),]
server <- function(input, output, session) {
output$mymap <- renderLeaflet({
leaflet(options = leafletOptions(maxZoom = 18)) %>% addTiles() %>%
addPolygons( data = world.borders, fill = "#D24618", color = "blue")
})
}
ui <- fluidPage(
leafletOutput("mymap"),
selectInput(inputId = "country_choice",label = "Select a country",choices = unique(world.borders$NAME))
)
shinyApp(ui, server)
非常感谢!
这应该可以解决问题:
library(shiny)
library(shinyjs)
library(leaflet)
library(sf)
### Note had to download by hand as this did not work
## download.file(url = "http://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.zip",
## destfile = "TM_WORLD_BORDERS-0.3.zip")
## unzip( zipfile = "TM_WORLD_BORDERS-0.3.zip" )
world.borders <- read_sf( dsn = getwd(), layer = "TM_WORLD_BORDERS-0.3" )
world.borders <- world.borders[world.borders$NAME %in%
c("Australia", "United States", "Brazil",
"Ireland", "India", "Kenya"), ]
ui <- fluidPage(
useShinyjs(),
leafletOutput("mymap"),
selectInput(inputId = "country_choice",
label = "Select a country",
choices = c("Please Select..." = "", unique(world.borders$NAME)))
)
server <- function(input, output, session) {
runjs(glue::glue("$('.selectize-control').on('mouseenter', ",
"'.selectize-dropdown-content div', ",
"function() {{",
" Shiny.setInputValue('selected', $(this).data('value'));}}); ",
"$('.selectize-control').on('mouseleave', ",
"'.selectize-dropdown-content div', ",
"function() {{",
" Shiny.setInputValue('selected', null);}})"))
output$mymap <- renderLeaflet({
myBorders <- world.borders[world.borders$NAME == input$selected, ]
leaflet(options = leafletOptions(maxZoom = 18)) %>% addTiles() %>%
addPolygons(data = myBorders, fill = "#D24618", color = "blue")
})
}
shinyApp(ui, server)