正在尝试使用这些属性创建闪亮的应用程序。
默认视图为聚合层。将有列数/条数。单击列时,该视图将更新以显示数据的非聚合版本。这就像知道正在点击哪个栏并筛选与其相关的数据。
我已经编写了下面的代码,它执行聚合层。但是,不确定如何获取";CLICKED_ON_This_BAR&Quot;详细信息。在这里,如果我们得到,用户点击了";区域A";的栏,那么我们就可以使用区域A过滤orig_df并更新视图。如何进行这项工作?
rm( list = ls() )
library( shiny ) ; library( shinydashboard ) ; library( dplyr ) ; library( deckgl )
ui <- basicPage( deckglOutput( 'map', height = '800px' ) )
server <- function(input, output) {
aggregate_df = data.frame( 'area' = LETTERS[1:2], 'count' = 110:111, median_lon = c( 3.39, 3.41 ),
median_lat = c( 49.7, 49.4 ), color = c("#0080FF", "#FF0080") )
orig_df = data.frame( 'area' = rep( c( 'A', 'B' ), c( 3, 2 ) ), count = 10:14, lon = c( 3.45, 3.39, 3.19, 3.41, 3.92 ),
lat = c( 48, 49.7, 52, 49.4, 51.5 ), color = c("#0080FF", "#FF0080", "#FF3030", "#00EE00", '#FF7F24') )
output$map = renderDeckgl({
deckgl( zoom = 7, pitch = 35, latitude = 48.29507, longitude = 4.0731520 ) %>%
add_column_layer(
data = aggregate_df,
getPosition = ~median_lon + median_lat,
getElevation = ~count,
getFillColor = ~color,
getTooltip = "Area: {{area}}, Count: {{count}}",
elevationScale = 100
) %>% add_basemap()
})
# observeEvent({
#
# deckgl_proxy( 'map' ) %>%
#
# add_column_layer(
# data = orig_df %>% filter( area == click[['A']] ),
# getPosition = ~lon + lat,
# getElevation = ~count,
# getFillColor = ~color,
# getTooltip = "Area: {{area}}, Count: {{count}}",
# elevationScale = 50
# ) %>% update_deckgl(it = "works")
#
# })
}
shinyApp(ui, server)
您就快成功了。您要做的是监听input$map_onclick
反应,它除了返回其他信息外,还返回一个包含相关信息的对象槽。只要您单击任何栏,就会生成此对象,下面是反应的结构:
List of 1
$ map_onclick:List of 3
..$ lng : num 3.4
..$ lat : num 49.4
..$ object:List of 5
.. ..$ area : chr "B"
.. ..$ count : int 111
.. ..$ median_lon: num 3.41
.. ..$ median_lat: num 49.4
.. ..$ color : chr "#FF0080"
有了这段信息,就可以非常直接地调整您的代码(虽然我从未使用过deckgl
,所以我只是使用了您的注释代码--根据需要进行调整)
observeEvent(input$map_onclick, {
deckgl_proxy( 'map' ) %>%
add_column_layer(
data = orig_df %>% filter( area == input$map_onclick$object[["area"]] ),
getPosition = ~lon + lat,
getElevation = ~count,
getFillColor = ~color,
getTooltip = "Area: {{area}}, Count: {{count}}",
elevationScale = 50
) %>% update_deckgl(it = "works")
})
我想剩下要做的是添加一些从详细地图中获取的逻辑,但您可以很容易地向数据添加一个标志,从中可以得出您所在的层(聚合或原始),并在此基础上运行不同的逻辑。
上一篇:ShinyDashboard动态项目符号符号、项目、动态、ShinyDashboard
下一篇:Shinydashboard:Google Places AutoComplete。InvalidValueError:不是HTMLInputElement的实例实例、不是、Places、Google