我无法使用传单和折线进行串扰 - 这是一个MWE:
library(crosstalk)
library(leaflet)
theta <- seq(0, 2*pi, len = 100)
dat <- data.frame(
lon = cos(theta),
lat = sin(theta),
t = 1:100
)
sd <- SharedData$new(dat)
map <- leaflet() %>%
addTiles() %>%
addCircleMarkers(data = sd, lat = ~lat, lng = ~lon, color = "blue") %>%
addPolylines(data = sd, lat = ~lat, lng = ~lon, color = "blue")
bscols(
filter_slider("t", "Time", sd, column = ~t),
map
)
时间filter_slider适用于圆形标记,但不适用于折线。
如果有人可以指出我正确的方向,那么很高兴能在R传单中解决这个问题。即改变/实施需要什么?我认为现在javascript方面缺少支持?
答案 0 :(得分:2)
更新:好消息! @dmurdoch已提交拉取请求以添加对折线和多边形的支持。 使用他的串扰版本,您现在可以过滤传单线/多边形(如果它们是sp对象)(注意,它似乎不适用于sf)。
首先,您需要安装此版本的串扰:
devtools::install_github("dmurdoch/leaflet@crosstalk4")
然后,您需要确保您的功能是Spatial对象,使用rgdal或raster很容易:
shapes_to_filter <- raster::shapefile("data/features.shp") # raster import to 'Spatial Object'
shapes_to_filter <- rgdal::readOGR("data/features.shp") # rgdal import to 'Spatial Object'
或者,如果你对大多数空间任务使用sf和dplyr(比如我),将sf对象转换为Spatial:
library(dplyr)
library(sf)
shapes_to_filter <- st_read("data/features.shp") %>% as('Spatial') # sf import to 'Spatial Object'
然后为leaflet创建一个sd对象,并为过滤器创建一个数据框副本(重要说明:注意如何使用sd_map中的组名设置sd_df的组):
library(crosstalk)
sd_map <- SharedData$new(shapes_to_filter)
sd_df <- SharedData$new(as.data.frame(shapes_to_filter@data), group = sd_map $groupName())
使用sd_df:
创建串扰滤波器 filter_select("filterid", "Select Filter Label", sd_df, ~SomeColumn)
使用sd_map对象创建地图:
library(leaflet)
leaflet() %>%
addProviderTiles("OpenStreetMap") %>%
addPolygons(data = sd_map)
任何链接的表格/图表都需要使用sd_df对象:
library(DT)
datatable(sd_df)
以下是该解决方案的所有来源:
Github pull request from dmurdoch to add support for polygons/lines
Original solution - with outdated method "sd$transform"
Updated example - with the new "group" method, but I couldnt get their RMD to work
答案 1 :(得分:0)
如前所述Bhaskar Karambelkar: “串扰现在只适用于标记,而不适用于折线/多边形”
我希望这很快就会改变。