我无法让串扰与传单和折线一起工作 - 这是一个 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
)
Run Code Online (Sandbox Code Playgroud)
时间 filter_slider 适用于圆形标记,但不适用于折线。
如果有人能给我指出正确的方向,我很乐意在 R 传单包中尝试修复此问题。即需要改变/实施什么?我认为目前 javascript 方面缺少支持?
更新:好消息!@dmurdoch 已提交拉取请求以添加对折线和多边形的支持。使用他的串扰版本,您现在可以过滤传单线/多边形(如果它们是 sp 对象)(注意,它似乎不适用于 sf)。
首先,您需要安装此版本的串扰:
devtools::install_github("dmurdoch/leaflet@crosstalk4")
然后,您需要确保您的要素是空间对象,可以轻松使用 rgdal 或栅格:
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'
然后为传单创建一个 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)
以下是该解决方案的所有来源:
来自 dmurdoch 的 Github Pull 请求添加对多边形/线条的支持
原始解决方案 - 使用过时的方法“sd$transform”
更新的示例 - 使用新的“组”方法,但我无法让他们的 RMD 工作