【问题标题】:R shiny dashboard Leaflet pop-up grey backgroundR 闪亮的仪表板传单弹出灰色背景
【发布时间】:2020-01-18 05:02:15
【问题描述】:

我不熟悉 R 并尝试使用 Shiny 开发仪表板。

我正在添加一个数据表,这运行良好。单击记录时,我设法创建了一个弹出窗口。弹出窗口显示传单地图,但背景是灰色的。我无法弄清楚原因。

此外,我想在单击带有纬度/经度的行时缩放到该位置。这可能吗?

目前为止的代码

library(shiny)
library(leaflet)
library(shinyBS)



##############################################################################
# UI Side
##############################################################################

ui <- fluidPage(

    DT::dataTableOutput("mydatatable")


)

##############################################################################
# Server Side
##############################################################################

server <- (function(input, output, session) {

    mycars = head(mtcars)
    output$mydatatable = DT::renderDataTable(mycars, selection = 'single',  
                                             rownames = FALSE,
                                             filter = 'top',
                                             options = list(dom = 't'))


    observeEvent(input$mydatatable_rows_selected,
                 {
                     showModal(modalDialog(
                         title = "You have selected a row!",
                         leaflet() %>% 
                             addProviderTiles(providers$OpenStreetMap)
                     ))
                 })



})


# Run the application 
shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny datatables leaflet shinydashboard


    【解决方案1】:

    要显示地图,请将您的传单参数包含在 renderLeaflet() 中。

    要放大特定的纬度和经度,请使用setView(),您还可以在其中添加缩放级别。在这里,我将其设置为巴黎:

      observeEvent(input$mydatatable_rows_selected,
                   {
                     showModal(modalDialog(
                       title = "You have selected a row!",
                       renderLeaflet(leaflet() %>% 
                                      setView(lng = 2.349014, lat = 48.864716, zoom = 6) %>%
                                       addProviderTiles(providers$OpenStreetMap))
                     ))
                   })
    
    

    编辑

    我在这里创建了一个假数据集,其中包含您感兴趣的数据 - 如果您需要包含某些功能,这就是您将来询问问题时应该做的事情。

    注意添加了一个响应式数据集 (filtered_data),它基本上将原始数据集 (fake_data) 过滤到已单击的行号。然后可以将其输入到 Leaflet 参数中。

    server <- (function(input, output, session) {
    
      fake_data = data.frame(name = c("Paris", "Sydney"), 
                             longitude = c(2.349014, 151.209900), 
                             latitude = c(48.864716, -33.865143))
    
      filtered_data <- reactive({fake_data[input$mydatatable_rows_selected, ]})
    
      output$mydatatable = DT::renderDataTable(fake_data, 
                                               selection = 'single',  
                                               rownames = FALSE,
                                               filter = 'top',
                                               options = list(dom = 't'))
    
      observeEvent(input$mydatatable_rows_selected,
                   {
                     showModal(modalDialog(
                       title = "You have selected a row!",
                       renderLeaflet(leaflet() %>% 
                                      setView(lng = filtered_data()$longitude, 
                                              lat = filtered_data()$latitude, 
                                              zoom = 6) %>%
                                       addProviderTiles(providers$OpenStreetMap))
                     ))
                   })
    
    })
    

    【讨论】:

    • 感谢您的回答!这行得通。但是我不确定如何添加反应式表达式来工作。我正在使用的数据具有以下结构:名称 |经度 |纬度。
    • 这太棒了!感谢您提供额外的代码。接下来的问题我将添加一个假数据集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多