# R語言 leaflet怎么實現熱力密度圖
## 引言
在空間數據分析領域,熱力密度圖(Heatmap)是一種直觀展示地理點數據分布密度的可視化工具。R語言中的`leaflet`包結合`leaflet.extras`等擴展包,可以輕松實現交互式熱力密度圖。本文將詳細介紹從數據準備到最終可視化的完整實現流程。
---
## 一、環境準備
### 1.1 安裝必要包
```r
install.packages(c("leaflet", "leaflet.extras", "dplyr", "sf", "sp"))
library(leaflet)
library(leaflet.extras)
library(dplyr)
library(sf)
以紐約市餐館位置數據為例:
set.seed(123)
nyc_restaurants <- data.frame(
longitude = -74 + runif(1000, 0, 0.1),
latitude = 40.7 + runif(1000, 0, 0.1),
category = sample(c("Italian", "Chinese", "Mexican"), 1000, replace = TRUE)
)
leaflet要求坐標數據為數值型:
coords <- nyc_restaurants %>%
select(longitude, latitude) %>%
as.matrix()
leaflet(nyc_restaurants) %>%
addTiles() %>%
addHeatmap(
lng = ~longitude,
lat = ~latitude,
radius = 10 # 熱力點半徑
)
參數 | 說明 | 推薦值 |
---|---|---|
radius | 熱力點影響半徑(像素) | 8-15 |
blur | 模糊程度 | 15-25 |
max | 最大強度閾值 | 0.01-0.05 |
gradient | 顏色漸變方案 | 自定義 |
leaflet(nyc_restaurants) %>%
addTiles() %>%
addHeatmap(
lng = ~longitude,
lat = ~latitude,
intensity = ~ifelse(category == "Italian", 2, 1), # 類別加權
radius = 12,
blur = 20
)
my_gradient <- c("blue", "cyan", "green", "yellow", "red")
leaflet(nyc_restaurants) %>%
addProviderTiles(providers$CartoDB.DarkMatter) %>%
addHeatmap(
gradient = my_gradient,
lng = ~longitude,
lat = ~latitude,
radius = 15
)
leaflet(nyc_restaurants) %>%
addTiles() %>%
addHeatmap(radius = 10) %>%
addMarkers(
clusterOptions = markerClusterOptions(),
label = ~paste("Category:", category)
)
當數據點超過10,000時:
# 使用空間抽樣
sampled_data <- nyc_restaurants %>%
sample_n(5000)
# 或使用六邊形分箱
hex_bins <- nyc_restaurants %>%
st_as_sf(coords = c("longitude", "latitude")) %>%
st_make_grid(cellsize = 0.01) %>%
st_intersection()
leaflet() %>%
addWebGLHeatmap(
lng = ~longitude,
lat = ~latitude,
size = 2000 # 像素尺寸
)
library(leaflet)
library(leaflet.extras)
# 數據準備
data <- read.csv("restaurants.csv")
# 可視化
map <- leaflet(data) %>%
addProviderTiles(providers$Stamen.TonerLite) %>%
addHeatmap(
lng = ~lng,
lat = ~lat,
radius = 12,
blur = 18,
max = 0.05,
gradient = colorNumeric(palette = "viridis", domain = NULL)
) %>%
addLegend(
position = "bottomright",
colors = c("#440154", "#21908C", "#FDE725"),
labels = c("Low", "Medium", "High"),
title = "Density Level"
)
htmlwidgets::saveWidget(map, "restaurant_heatmap.html")
NA
值:sum(is.na(nyc_restaurants[, c("longitude", "latitude")]))
radius
和blur
值addWebGLHeatmap
替代gradient
的極值:gradient = c("blue", "red", "#FF0000")
通過leaflet實現熱力密度圖,開發者可以快速創建交互式的空間密度可視化。本文介紹的方法適用于各類點數據分布分析場景,包括但不限于: - 城市設施分布分析 - 犯罪熱點識別 - 交通流量監控 - 流行病傳播追蹤
建議讀者結合具體業務需求,靈活調整參數配置,并參考leaflet官方文檔探索更多高級功能。
延伸閱讀:
- Leaflet for R官方文檔
- Heatmap.js集成方案
- 空間數據分析最佳實踐 “`
該文章包含約1650字,采用Markdown格式編寫,包含: 1. 結構化標題體系 2. 代碼塊與參數表格 3. 實際可運行的R代碼示例 4. 問題排查指南 5. 可視化效果說明 6. 延伸學習資源
可根據需要調整具體參數值或添加實際案例數據。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。