在传单中,我通常会创建一个地图:
server.R
shinyServer(function(input, output, session) {
url <- "custommapboxurl"
attrib <- "Maps by http://www.mapbox.com/Mapbox"
...
map_out <- reactive({
map <- leaflet()%>%
addTiles(urlTemplate = url, attribution = HTML(attrib))%>%
addPolygons(data = sub_shape,
fill = TRUE,
fillColor = colors$color,
fillOpacity = .8,
stroke = TRUE,
weight = 3,
color = "white",
dashArray = c(5,5),
popup = pops
)
})
output$myMap <- renderLeaflet({
map_out()
})
...
})
上面的 sub_shape
是我的shapefile(在本例中是美国的邮政编码),颜色$ color是与每个形状对应的颜色的动态矢量。您可以使用此处的链接重新创建:http://www.nws.noaa.gov/geodata/catalog/national/html/province.htm和colors <- data.frame(color = colorRampPalette(c("white","blue"))(13))
ui.R
shinyUI(
...
leafletOutput('myMap', width = "100%" , height = "100%")
...
)
这给出了:
我想要做的是根据用户的输入更改颜色矢量。例如,他们可能会选择一个不同的变量来为每个邮政编码着色,生成一个新的渐变。
Shiny允许我们这样做,就好像我根据输入小部件更改颜色向量,反应函数刷新,并根据新向量重新创建地图。问题是,对于大型shapefile对象,此刷新需要很长时间。
有没有办法直接更改当前渲染形状的颜色,而无需重新创建整个图层?似乎color参数被锁定在leaflet()函数中。还有其他方法可以解决这个问题吗?
答案 0 :(得分:1)
为说明@Yihui Xie的评论,下面是一个示例,该示例基于frame
使用layoutSubviews
来更改多边形的颜色。
leafletProxy