根据 plotly 包的官网,绘制一个热力图是很简单的,如下
plotly::plot_ly(
data = quakes, lat = ~lat, lon = ~long, radius = 10,
type = "densitymapbox", coloraxis = "coloraxis"
) |>
plotly::layout(
mapbox = list(
style = "stamen-terrain", zoom = 3,
center = list(lon = 180, lat = -25)
),
coloraxis = list(colorscale = "Viridis")
)
现在,想了解一下 densitymapbox 是咋实现的?猜测也是二维核密度估计。plotly 包上游是 plotly.js 库,想看看 JS 层面的二维核密度估计实现,不知道怎么看plotly.js 库的源码?
一些参考材料
densitymapbox 来自上游的 JS 库 https://github.com/plotly/plotly.js
https://github.com/plotly/plotly.js/tree/master/src/traces/densitymapbox
mapbox JS 库 heatmap 层的示例,只有示例用法,没有算法说明
https://docs.mapbox.com/mapbox-gl-js/example/heatmap-layer/
源码 https://github.com/mapbox/mapbox-gl-js