【问题标题】:Change leaflet heatmap options in shiny更改闪亮的传单热图选项
【发布时间】:2018-06-19 03:16:40
【问题描述】:

我正在为传单使用 leaflet-heat.js 插件。 我可以使它工作的唯一方法是通过 rCharts 库。 R shiny leaflet javascript addons - heatmap

热图正确显示,但我无法更改热图选项。 此外,如果我取消注释代码的反应部分,应用程序会崩溃。

似乎修改热图图层不透明度的唯一方法是通过CSS,但我不知道如何在这里实现它。 control the opacity of heatmap using leaflet heatmap

这里是代码的有效部分,有问题的行被注释掉了。

library(shiny)
library(shinydashboard)
library(rCharts)

# Define UI for app

header1 <- dashboardHeader(
  title = "My Dashboard"
)

sidebar1 <- dashboardSidebar(
  sidebarMenu(
    fileInput("file0", "Choose CSV File",
              multiple = TRUE,
              accept = c("text/csv",
                         "text/comma-separated-values,text/plain",".csv")),
    sliderInput("opacity", "Opacity:",
                min = 0, max = 1,
                value = 0.5, step = 0.05),
    sliderInput("radius", "Radius:",
                min = 0, max = 50,
                value = 25),
    sliderInput("blur", "Blur:",
                min = 0, max = 1,
                value = 0.75, step = 0.05),
    sliderInput("maxvalue", "MaxValue:",
                min = 0, max = 1,
                value = 1, step = 0.05)
  ) #sidebarMenu
) #dashboardSidebar

body1 <- dashboardBody(
  fluidRow(
    box(
      title = "Box Title 1", width = 11, solidHeader = TRUE, status = "primary",
      chartOutput("baseMap", "leaflet"),
      tags$style('.leaflet {width: 600px; height: 400px;}'),
      tags$head(tags$script(src="http://leaflet.github.io/Leaflet.heat/dist/leaflet-heat.js")),
      uiOutput('heatMap')
    ) #box
  ) #fluidRow
) #dashboardBody

ui <- dashboardPage(header1, sidebar1, body1)

# Define data
dat <- data.frame(latitude = c(14.61),
                  longitude = c(-90.54),
                  intensity = c(100))

# Define SERVER logic
server <- function(input, output, session) {

  opacityoption <- reactive({
    paste("minOpacity = ",as.character(input$opacity))
  })

  radiusoption <- reactive({
    paste("radius = ",as.character(input$radius))
  })

  bluroption <- reactive({
    paste("blur = ",as.character(input$blur))
  })

  maxoption <- reactive({
    paste("max = ",as.character(input$maxvalue))
  })

  output$baseMap <- renderMap({
    baseMap <- Leaflet$new() 
    baseMap$setView(c(14.61,-90.54) ,12) 
    baseMap$tileLayer(provider="Esri.WorldTopoMap")
    baseMap
  })

  output$heatMap <- renderUI({

    j <- paste0("[",dat[,"latitude"], ",", dat[,"longitude"], ",", dat[,"intensity"], "]", collapse=",")
    j <- paste0("[",j,"]")
    j

    tags$body(tags$script(HTML(sprintf("
                                       var addressPoints = %s
                                       var heat = L.heatLayer(addressPoints).addTo(map)"
                                       , j)
    )))

    # THESE LINES DO NOT WORK - THE OBSERVE BLOCK CRASHES
    # tags$body(tags$script(HTML(sprintf("heat.setOptions(minOpacity = 0.5)"
    # )))) #tags$body

    # tags$body(tags$script(HTML(sprintf("heat.setOptions(radius = 50)"
    # )))) #tags$body

    # observe({
    #   tags$body(tags$script(HTML(sprintf(paste("heat.setOptions(",opacityoption,", ",radiusoption,", ",bluroption,", ",maxoption,")")
    #   )))) #tags$body
    # }) #observe

  }) #renderUI

} #server


# Run app
shinyApp(ui, server)

我们将不胜感激您的帮助! :)

【问题讨论】:

  • 如果你对热图感兴趣,你看过这个:rdocumentation.org/packages/leaflet.extras/versions/0.2/topics/…
  • 感谢您的建议!我用leaflet.extras 库试了一下,但是热图部分崩溃了。这是我的代码。有些行已被注释,因为它们会使应用程序崩溃。
  • 请看问题编辑...
  • 该应用程序现在可以与闪亮的传单一起使用。但是每当我尝试在服务器块内执行此操作时,它都会崩溃。 # 这些块被注释掉是因为它崩溃了 # addHeatmap("MapPlot1", lng = -90.54, lat = 14.61, intensity = 1, # minOpacity = 0.05, max = 1, # radius = 25, blur = 15, #data =传单::getMapData(map))
  • 我还需要知道如何更新热图选项 ... observeEvent(input$opacity, { # 如何在 OBSERVE EVENT 内更新热图选项?}) #observeEvent

标签: r shiny leaflet heatmap r-leaflet


【解决方案1】:

您正在寻找这样的东西吗?这是addHeatmap 的示例。只需移动您的sliderInput,您就会看到地图会相应地发生变化。它似乎不适用于maxvalue,但更改sliderInput 中的数字,它就会起作用。您可能还想查看leafletProxy

library(shiny)
library(shinydashboard)
library(leaflet)
library(leaflet.extras)

# Define UI for app

header1 <- dashboardHeader(
  title = "My Dashboard"
)

sidebar1 <- dashboardSidebar(
  sidebarMenu(
    fileInput("file0", "Choose CSV File",
              multiple = TRUE,
              accept = c("text/csv",
                         "text/comma-separated-values,text/plain",".csv")),
    sliderInput("opacity", "Opacity:",
                min = 0, max = 1,
                value = 0.5, step = 0.05),
    sliderInput("radius", "Radius:",
                min = 0, max = 50,
                value = 25),
    sliderInput("blur", "Blur:",
                min = 0, max = 30,
                value = 0.75, step = 2),
    sliderInput("maxvalue", "MaxValue:",
                min = 0, max = 1,
                value = 1, step = 0.05)
  ) #sidebarMenu
) #dashboardSidebar

body1 <- dashboardBody(
  fluidRow(
    box(
      title = "Box Title 1", width = 11, solidHeader = TRUE, status = "primary",
      leafletOutput("baseMap"),
      tags$style('.leaflet {width: 600px; height: 400px;}'),
      tags$head(tags$script(src="http://leaflet.github.io/Leaflet.heat/dist/leaflet-heat.js"))
    ) #box
  ) #fluidRow
) #dashboardBody

ui <- dashboardPage(header1, sidebar1, body1)

# Define data
dat <- data.frame(latitude = c(14.61, 15),
                  longitude = c(-90.54, -90.65),
                  intensity = c(100, 125))

# Define SERVER logic
server <- function(input, output, session) {

  output$baseMap <- renderLeaflet({
    leaflet(data = dat) %>% addProviderTiles(providers$Stamen.TonerLite,
                                   options = providerTileOptions(noWrap = TRUE)) %>% setView(-90.54, 14.61, zoom = 12) %>%
      addHeatmap(lng = ~longitude, lat = ~latitude, intensity = ~as.numeric(intensity), minOpacity= ~input$opacity, blur = ~input$blur, max = ~input$maxvalue, radius = ~input$radius)
  })


} #server


# Run app
shinyApp(ui, server)

【讨论】:

  • 太棒了!这是正确的方向!但是,blur 和 maxvalue 有一个问题,因为当它们的值大于零时,它们似乎会从 0 跳到无穷大。有没有解决不透明度的方法?我很乐意让它像这样工作......heatmap.joyofdata.de
  • 查看更新,可以使用minOpacity;您是否尝试过使用更大的数据集?
  • 嗨 MLavoie!我的参数下限和上限是错误的。您的示例现在有效!但是,minOpacity 参数的行为与最初预期的不同 - 它似乎与 maxvalue 参数相反。有没有办法控制热图图层的整体不透明度?
  • 在平铺选项参数中尝试不透明度
  • 当您只有几个点时,minOpacity 参数的工作方式很奇怪。添加更多点后,minOpacity 按预期工作。
猜你喜欢
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多