传单 renderLeaflet 不能在闪亮的工作

leaflet renderLeaflet not working in shiny

我正在使用传单包绘制地图并在地块上绘制纬度和经度。 我在 R 中进行以下操作。

m <- leaflet() %>%
addTiles() %>%  # Add default OpenStreetMap map tiles
addMarkers(lng=df_final$order_long, lat=df_final$order_lat)
m

它在 R 控制台中工作得很好。但是当我在 shiny 中使用它时它不起作用 这是我的 ui.r 代码片段

tabPanel("Order Locations", leafletOutput("map", width = "80%", height =  
"80%"))

这是server.r代码片段

 output$map<- renderLeaflet({

 dataset<-dataUpload()
 leaflet() %>%
 addTiles() %>%  # Add default OpenStreetMap map tiles
 addMarkers(lng=dataset$order_long,lat=dataset$order_lat)
 })

它没有显示任何内容。我哪里错了。请帮忙

这很有效,我让它尽可能接近你的。它显然不喜欢百分比高度:

library(shiny)
library(leaflet)

r_colors <- rgb(t(col2rgb(colors()) / 255))
names(r_colors) <- colors()

ui <- fluidPage(
  actionButton("recalc", "New points"),
  mainPanel(
    tabsetPanel(
      tabPanel("Order Locations", leafletOutput("map",width="80%",height="400px")),
      tabPanel("Markers", verbatimTextOutput("markers"))
    )
  )
)

if (!file.exists("df_final.csv")){
  nmark <- 50
  hv <- 80
  df_final <- data.frame(order_long=runif(nmark,-hv,hv),
                         order_lat=runif(nmark,-hv,hv))
  write.csv(df_final,"df_final.csv",row.names=F)
}

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

  dataUpload <- reactiveFileReader(1000, session, 'df_final.csv', read.csv)

  output$map <- renderLeaflet({
    leaflet() %>%
      addTiles() %>%
      addMarkers(lng=dataUpload()$order_long,lat=dataUpload()$order_lat)
  })
  output$markers <- renderPrint({print(dataUpload())})
}

shinyApp(ui, server)

产量:

成功了。 ui.r 文件有问题。

这是修改后的代码

tabPanel("Order Locations", leafletOutput("map"))

摆脱了宽度和高度参数,它可以使用默认设置。

派对有点晚了,但您可以添加自己的 CSS 来控制传单的美观,通常在 www 文件夹中,例如www/styles.css,它具有响应 window 大小变化的额外好处。

  /* styles.css */
  div.outer {
  position: fixed;
  top: 45px; /* set to fit nicely with Shinydashboard's dashboardHeader(), adjust according to your own preferences. */
  left: 0;
  right: 0;
  bottom: 0;
  overflow-y: auto;
  padding: 0;
}

并在 ui 中的 div() 中添加此 class:

ui <- fluidPage(
 actionButton("recalc", "New points"),
 mainPanel(
  tabsetPanel(
   tabPanel("Order Locations", 
            div(
             class = "outer",
             tags$head(
              includeCSS("www/styles.css")
             ),
             leafletOutput("map",width="100%",height="100%")
             )
            ),
   tabPanel("Markers", verbatimTextOutput("markers"))
  )
 )
)

结果: