【问题标题】:Specify point radius using Java Script htmlwidget in R leaflet在 R 传单中使用 Java Script htmlwidget 指定点半径
【发布时间】:2020-01-07 20:51:28
【问题描述】:

我正在使用此处提供的(非常有用的)代码https://github.com/timelyportfolio/leaftime/blob/master/inst/examples/example_leaftime.R 使用 R 中的传单构建时间序列图。我似乎无法弄清楚如何定义地图上每个点的半径,并希望有人能够指出我正确的方向。

我的测试数据如下:

data <- data.frame(

"latitude" = c(36.998953, 38.998607, 40.547953, 36.475103, 34.634023),

"longitude" = c(-78.766255, -81.051412, -78.969508, -83.298121, -78.541041),

"start" = seq.Date(as.Date("2009-01-01"), by="day", length.out = 5),

"end" = seq.Date(as.Date("2009-01-01"), by = "day", length.out = 5) + 1,

"radius" = c(10, 8, 5, 12, 7)

)

我可以使用这里的代码创建一个基本的时间序列图:

library(leaflet)
library(leaftime)
library(htmltools)
library(geojsonio)
library(geojsonlint)

leaflet(geojsonio::geojson_json(data, lat="latitude", lon="longitude")) %>%
  addTiles() %>%
  setView(-79.771504, 36.854041, 2) %>%
  addTimeline(
    sliderOpts = sliderOptions(
      formatOutput = htmlwidgets::JS("function(date) {return new 
      Date(date).toDateString()}"), position = "bottomright", duration = 3000),
    timelineOpts = timelineOptions(
      styleOptions = styleOptions(radius = 5, color = "black", fillColor = "blue", fillOpacity = 0.60)))

但是修改这段代码来自定义每个点的半径是行不通的:

leaflet(geojsonio::geojson_json(data, lat="latitude", lon="longitude")) %>%
  addTiles() %>%
  setView(-79.771504, 36.854041, 2) %>%
  addTimeline(
    sliderOpts = sliderOptions(
      formatOutput = htmlwidgets::JS("function(date) {return new 
      Date(date).toDateString()}"), position = "bottomright", duration = 3000),
    timelineOpts = timelineOptions(
      styleOptions = styleOptions(radius = htmlwidgets::JS("function getRadius(d) {return +d.properties.radius}"), 
      color = "black", fillColor = "blue", fillOpacity = 0.60)))

似乎是从JS htmlwidget调用java脚本函数getRadius时出现错误,但我不熟悉java脚本语言,不知道如何解决。感谢您的帮助!

【问题讨论】:

标签: javascript r leaflet htmlwidgets r-leaflet


【解决方案1】:

如果你指的是 JS 代码,试试:function getRadius(d) {return d.properties.radius}

【讨论】:

  • 感谢@Falke Design 的建议,但它没有解决问题,是否有另一种方法来定义每个点的半径?
  • 硬编码半径是否有效?改为:radius = htmlwidgets::JS(...radius = 5,
  • Ups,你已经尝试过了。你在控制台中得到了什么:`htmlwidgets::JS("function getRadius(d) {console.log(d); return d.properties.radius;}")
  • 感谢@Falke Design。当我运行您建议的代码时,控制台没有打印任何内容...地图出现但没有点,就像以前一样。也许我做错了什么?关于为什么我的代码可能无法正常工作的另一个想法,我是否将 htmlwidgets::JS 指向半径信息的正确源(数据)?
  • 是的,看起来您在函数中没有数据。您可以尝试在浏览器中使用调试器。但很抱歉,我无法为您提供更多帮助,我从未在 R 中编程过,而且我对 htmlwidgets 也一无所知
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多