闪亮的leafpop::addPopupGraphs错误,正在寻找一个演练

42fyovps  于 2023-01-03  发布在  其他
关注(0)|答案(3)|浏览(107)

我遇到了leafpop函数addPopupGraphs的一个奇怪行为。这是一个可重现的示例,说明了这个问题。
执行后,如果你点击一个标记,一个弹出图形出现。如果你只是移动滑动条,并再次点击标记没有弹出出现,我想让它出现。
我看到,如果只注解行label = my.var,弹出窗口工作正常,但我需要变量my.var的依赖关系。

library(shiny)
library(leaflet)
library(leafpop)
library(ggplot2)

ui = fluidPage(
  sliderInput(inputId = "potatoes",
              label = "Potatoes:",
              min = 1,
              max = 10,
              value = 2,
              step = 1,
              animate = F,
              width = '100%'),
  leafletOutput('my_map', height = 700)
)

server = function(input, output, session) {

  output$my_map <- renderLeaflet({

    my_map <- function(my.var = character()){

      my.plot <- ggplot(mtcars, aes(cyl, mpg)) + geom_line()

      m <- leaflet() %>%
        addTiles(urlTemplate = 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png') %>%
        setView(lng = 10,
                lat = 49,
                zoom = 4) %>%
        addCircleMarkers(lng = c(10, 10),
                         lat = c(49, 50),
                         group = 'A',
                         label = my.var
                         ) %>%
        addPopupGraphs(list(my.plot,my.plot),
                       group = 'A',
                       width = 500, height = 300)

      return(m)
    }

    my_map(input$potatoes)
  })
}

shinyApp(ui, server)
k2fxgqgv

k2fxgqgv1#

作为一个变通方案,你可以使用mapview::popupGraph()代替。它对我很有效!更多信息here
我刚刚把popup = mapview::popupGraph(...)传递给了你的标记函数。

library(shiny)
library(leaflet)
library(leafpop)
library(ggplot2)

ui = fluidPage(
  sliderInput(inputId = "potatoes",
              label = "Potatoes:",
              min = 1,
              max = 10,
              value = 2,
              step = 1,
              animate = F,
              width = '100%'),
  leafletOutput('my_map', height = 700)
)

server = function(input, output, session) {

  output$my_map <- renderLeaflet({

    my_map <- function(my.var = character()){

      my.plot <- ggplot(mtcars, aes(cyl, mpg)) + geom_line()

      m <- leaflet() %>%
        addTiles(urlTemplate = 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png') %>%
        setView(lng = 10,
                lat = 49,
                zoom = 4) %>%
        addCircleMarkers(lng = c(10, 10),
                         lat = c(49, 50),
                         group = 'A',
                         label = my.var,
      ## Replaced leafpop::addPopuppGraph() here
                         popup = mapview::popupGraph(list(my.plot,my.plot))
                         )

      return(m)
    }

    my_map(input$potatoes)
  })
}

shinyApp(ui, server)

我相信leafpop的人会喜欢bug报告;).

jyztefdp

jyztefdp2#

请访问https://github.com/r-spatial/leafpop/issues/12#issuecomment-652549650获取解决方案。您需要使用您的输入更改group参数,然后它将正确呈现。

gxwragnw

gxwragnw3#

感谢@AF7的解决方案,我尝试了@TimSalabim和你的两个解决方案,都可以,虽然你的更好,因为复杂度更低,我发现mapview包中不再存在mapview::popupGraph(2022年12月31日),它只存在于leafpop::popupGraph中。
受您的代码启发,使用mapview和此处的页面:https://environmentalinformatics-marburg.github.io/mapview/popups/html/popups.html
我用mapview而不是leaflet编写了弹出窗口:

mapview(myMapObject, popup = leafpop::popupGraph(Graphs,width=200,height=200))@map

在shiny里工作没有问题。
图表是图表的列表,图表的编号应与myMapObject的编号(和顺序)匹配。myMapObject可以是点图层或多边形。
我的例子,我有一个多边形对象,我计算了它的图形,

相关问题