所以我试图创建一个美国所有县的等值区域地图,根据各种不同的变量(例如失业率,贫困率等)对县进行着色。
以下是我的代码:
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