【问题标题】:leaflet renderLeaflet not working in shiny传单 renderLeaflet 在闪亮时不起作用
【发布时间】:2015-12-28 15:53:30
【问题描述】:

我正在使用传单包来绘制地图并在图上绘制经纬度。 我在 R 中做以下事情。

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

它在 R 控制台中运行良好。但是当我在闪亮时使用它时它不起作用 这是我的ui.r 代码 sn-p

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

这是server.r代码sn-p

 output$map<- renderLeaflet({

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

它不显示任何东西。我哪里错了。请帮忙

【问题讨论】:

  • 没什么可继续的。至少发布一个“在 R 控制台中运行良好”的示例怎么样?
  • @Mike Wise 我已经发布了在 R 控制台中运行良好的代码
  • 哦,我知道它确实有效。好的
  • 你为什么打电话给dataUpload()?那是一个反应对象吗?
  • 一个reproducible example,即使它只是假数据,也会很有用。

标签: r maps shiny leaflet


【解决方案1】:

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

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)

产量:

【讨论】:

  • 我可以让它看起来更像你的例子,但它已经相当接近了。你想要我,还是这样就够了?
  • 如果你能,那将是一个很大的帮助。
  • 你能接受吗?我今天努力达到 3k :)
  • 有趣...但非常真实...leaflet 不是统计学家...而是网络开发人员。
【解决方案2】:

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

这是修改后的代码

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

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

【讨论】:

    【解决方案3】:

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

      /* 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() 中添加此类:

    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"))
      )
     )
    )
    

    结果:

    【讨论】:

      猜你喜欢
      • 2019-05-03
      • 2018-09-25
      • 1970-01-01
      • 2022-01-02
      • 2017-09-10
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多