Блестящая ошибка leafpop :: addPopupGraphs, ищущая обход - PullRequest
0 голосов
/ 18 марта 2020

Я испытал странное поведение функции 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)

1 Ответ

1 голос
/ 18 марта 2020

В качестве обходного пути вы можете использовать mapview::popupGraph() вместо этого. Меня устраивает! Подробнее здесь .

Я только что передал 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 понравится сообщение об ошибке;).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...