R闪亮仪表板传单弹出灰色背景

时间:2019-09-17 10:33:24

标签: r shiny datatables leaflet shinydashboard

我不喜欢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)

1 个答案:

答案 0 :(得分: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))
                 ))
               })

})