【问题标题】:Shiny leaflet select input code闪亮的传单选择输入代码
【发布时间】:2017-03-03 19:10:10
【问题描述】:

我想更改地图上选定区域的圆圈颜色。需要你的建议。请帮助我为 selectInput 操作创建正确的 observeEvent。我需要该应用清除我的圈子并仅突出显示带有特定弹出窗口的选定区域。

我的数据:

          Region     Pop  Latitude Lontitude
1         Cherkasy 1238593 49.444433 32.059767
2        Chernihiv 1040492 51.498200 31.289350
3       Chernivtsi  909081 48.292079 25.935837
4     City of Kyiv 2909491 50.450100 30.523400
5           Dnipro 3244341 48.464717 35.046183
6          Donetsk 4255450 48.015883 37.802850
7  Ivano-Frankivsk 1381014 48.922633 24.711117
8          Kharkiv 2711475 49.993500 36.230383
9          Kherson 1059481 46.635417 32.616867
10    Khmelnytskiy 1291187 49.422983 26.987133
11      Kirovohrad  969662 48.507933 32.262317
12            Kyiv 1732435 50.450100 30.523400
13         Luhansk 2200807 48.574041 39.307815
14            Lviv 2531265 49.839683 24.029717
15       Mykolayiv 1155174 46.975033 31.994583
16           Odesa 2386441 46.482526 30.723310
17         Poltava 1433804 49.588267 34.551417
18           Rivne 1161537 50.619900 26.251617
19            Sumy 1108651 50.907700 34.798100
20        Ternopil 1063264 49.553517 25.594767
21       Vinnytsya 1597683 49.233083 28.468217
22           Volyn 1042218 50.747233 25.325383
23     Zakarpattya 1258507 48.620800 22.287883
24    Zaporizhzhya 1747639 47.838800 35.139567
25        Zhytomyr 1244219 50.254650 28.658667

代码

library(shiny)
library(leaflet)
library(maps)
library(shinythemes)
library(readxl)

UkrStat <- read_excel("D:/My downloads/Downloads/R Studio/UkrStat.xlsx")

ui <- (fluidPage(theme = shinytheme("superhero"),
                 titlePanel("Map of Ukraine"),
                 sidebarLayout(
                   sidebarPanel(
                     selectInput("region", label = "Region", choices = c("", UkrStat$Region), selected = "City of Kyiv")
                   ),
                   mainPanel(
                     leafletOutput("CountryMap", width = 1000, height = 500))
                 )
))

server <- function(input, output, session){
  output$CountryMap <- renderLeaflet({
    leaflet() %>% addTiles() %>% addProviderTiles("CartoDB.Positron") %>%
      setView(lng = 31.165580, lat = 48.379433, zoom = 6) %>%
      addCircles(lng = UkrStat$Lontitude, lat = UkrStat$Latitude, weight = 1, radius = sqrt(UkrStat$Pop)*30, popup = UkrStat$Region)
  })

  observeEvent(input$region, {
    leafletProxy("CountryMap") %>% clearMarkers()
  })
}





# Run the application 
shinyApp(ui = ui, server = server)

【问题讨论】:

  • 能否提供样本数据?
  • @SBista,我已经用数据更新了我的问题。感谢您的帮助!

标签: input shiny maps leaflet


【解决方案1】:

要实现您想要的,您需要将 observeEvent 替换为 input$region 如下:

  observeEvent(input$region, {

    if(input$region != "")
    {
      leafletProxy("CountryMap") %>% clearShapes()
      index = which(UkrStat$Region == input$region)
      leafletProxy("CountryMap")%>% addCircles(lng = UkrStat$Lontitude[index], lat = UkrStat$Latitude[index],
                                               weight = 1, radius = sqrt(UkrStat$Pop[index])*30, popup = UkrStat$Region[index])
    }
  }) 

在这里,我首先清除所有圈子。之后,我找到所选区域的索引并获取相应的经度和纬度并在该位置添加圆圈。

希望对你有帮助!

【讨论】:

  • 非常感谢您的帮助!是的,现在它可以按我的意愿工作了。 @SBista
  • 如果这是你想要的,你能接受吗?
猜你喜欢
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 2020-08-01
相关资源
最近更新 更多