You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言热力图实现需求:点密集区设为红色,空白区设为蓝色

将点地图转换为热力图的解决方案

首先修正原代码中的一处小问题:你定义的变量是pv,但在创建dat1时误用了city,需要替换为pv以避免报错。

接下来我们基于ggplot2的核密度估计功能实现热力图,让点密集区域显示红色、空白区域显示蓝色。以下是修改后的完整代码:

library(tidyverse)
library(rnaturalearth)
library(rnaturalearthhires)

BRA <- ne_states(
  country = 'Brazil',
  returnclass = 'sf'
)

SP <- BRA[BRA$name_en == "São Paulo", ]

pv <- c("A", "B", "C", "D", "E",
        "F", "G", "H", "I", "J",
        "K", "L", "M", "N", "O", 
        "P", "Q", "R", "S", "T",
        "U", "V", "W", "Y", "Z",
        "AA", "AB", "AC", "AD", "AE",
        "AF", "AG", "AH", "AI")

lat <- c(-23.52930049225196, -22.78331698013921, -20.541233056028002, -23.734103743283697, -20.81422401709715,
         -23.46021280316764,  -23.089823347098537,  -22.566093157661058, -23.499929950832037, -23.4995629706946,
         -21.839674720627357,  -22.502281332972192,  -20.031620630731723,  -22.291436423446793,  -22.119199798047937,
         -23.490731337547388,  -21.97149754669437,  -21.599485041360634,  -21.205770335401102, -23.541710049999992,
         -23.45507023133906,  -20.584950881524634,  -15.32582591149114,  -22.977804504826633,  -22.367353815188075,
         -23.479082320220865, -23.76560073496052, -23.513253893618405,  -21.16997037155122,  -17.79009841494064,
         -22.90889180993712, -23.487005349783544, -16.324591284711158, -23.94363923416218)

lon <- c(-46.56640074294553, -45.19337166646478, -48.575447765010075, -46.57989152769541, -49.519226907240885,
         -47.475877520132805, -45.51948770419383, -47.42089079365687, -47.45645468398622, -46.62762674039795,
         -47.47595663591126, -48.70889390801834, -50.727563046759705, -48.55949071145823, -51.40084275157352, 
         -47.46717246210929, -46.79463584602512, -48.36108319953786, -50.44267199310968, -46.57118782780415,
         -46.52037744189376, -47.86603478808005, -49.117246403227426, -49.86555148857337, -46.943777559670785,
         -46.7417360477412, -46.37781898289404, -46.56538905635622, -47.814964992405606, -50.92576344342757,
         -47.068189856873516, -47.44645212858951, -48.95052196467507, -46.270547211146415)

# 修正变量名错误
dat1 <- data.frame(pv, lat, lon)

ggplot() +
  geom_sf(data = BRA, fill = "grey95") +
  geom_sf(data = SP, color = "black", fill = "white") +
  # 生成连续热力图填充层,基于经纬度的核密度估计
  stat_density_2d(
    data = dat1,
    aes(x = lon, y = lat, fill = after_stat(density)),
    geom = "raster",
    contour = FALSE,
    alpha = 0.7
  ) +
  # 设置颜色映射:低密度(空白区)为蓝色,高密度(密集区)为红色
  scale_fill_gradient(low = "blue", high = "red") +
  theme_light() +
  labs(x = "Longitude",
       y = "Latitude",
       fill = "点密度") +
  ylim(-25,-10) +
  xlim(-55,-40)

关键修改说明:

  • 替换原geom_point为stat_density_2d,使用raster几何对象生成连续的颜色填充,关闭等高线让热力效果更直观
  • 通过scale_fill_gradient指定颜色渐变规则,完全匹配你“密集红、空白蓝”的需求
  • 调整alpha参数让热力层不会完全覆盖底层地图边界,保证地理信息可见

内容的提问来源于stack exchange,提问作者Thiago_Alvarenga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:47:36