更改现有多边形onRender函数htmlWidgets Leaflet的颜色

时间:2018-03-31 16:50:43

标签: javascript shiny leaflet htmlwidgets r-leaflet

所以我试图创建一个美国所有县的等值区域地图,根据各种不同的变量(例如失业率,贫困率等)对县进行着色。

以下是我的代码:

library(shiny)
library(leaflet)
library(dplyr)
ui <- fluidPage("Mapping Characteristics of the USA",
           fluidRow(
                    column(10, leafletOutput("map")),
                    column(2, radioButtons(inputId = "radio", selected=character(0), label="Characteristics",
                                           choiceNames = c("Unemployment Rate", "% w/out high school education", "% w/out insurance"),
                                           choiceValues = c("uer", "no_hs_per", "no_insur")))))

server <- function(input, output, session)
{
  #Render the map
  output$map = renderLeaflet({leaflet(counties)})

   observeEvent(input$radio,
       { 
         #Create color function
         pal = colorBin(palette = topo.colors(10), domain = counties[[input$radio]], pretty=TRUE)

         #Redraw Map
         m = leafletProxy("map", session=session, data=counties) %>% clearShapes() %>%
           addPolygons(stroke=TRUE, weight=1, fillOpacity = 0.5, color = pal(counties[[input$radio]]))
       }) #End of observeEvent(input$radio, ...)
}

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

问题是每次用户点击新的单选按钮时,传单地图会重绘整个多边形图层。这可能需要一段时间,并且不会创建无缝的用户体验。我希望能够做的只是编辑已存在的多边形图层的颜色。

使用伪代码,它可能看起来像这样......

#Create the map where every county is initially blue
output$map = renderLeaflet({
             leaflet(counties) %>% addPolygons(stroke=TRUE, weight=1, fillOpacity = 0.5, color = "blue", group="Counties")
 })

observeEvent(input$radio,
 {
    #Create color function
    pal = colorBin(palette = topo.colors(10), domain = counties[[input$radio]], pretty=TRUE)

    #Edit the already existing counties group
    m = leafletProxy("map", session=session, data=counties) %>% setStyle(group = "Counties", newColor = pal(counties[[input$radio]]))
 })

我相信这样的事情可以通过添加一些Javascript来完成。在Leaflet for R教程页面中,他们提到了来自htmlwidgets的onRender()函数,作为引入Javascript(https://rstudio.github.io/leaflet/morefeatures.html)的一种方式。

在Leaflet Javascript包的文档页面上,还有一个setStyle()函数可以做我想要的,我想(在这里可以找到它的一个例子http://leafletjs.com/examples/choropleth/)。

唯一的问题是,当谈到Javascript时,我绝望地失去了。如果有人能指出我正确的方向如何将Javascript添加到我的上述脚本中以使其以我想要的方式工作,那就太棒了。

此外,如果有人知道任何其他包,地图绘制工具等,以创建我想要的地图,这可能比我目前正在做的更容易,我很想知道它们。

我想做的两个例子: http://www.nytimes.com/projects/census/2010/explorer.html https://www.socialexplorer.com/a9676d974c/explore

0 个答案:

没有答案