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

R语言实现带地图背景的温度热力图失败问题咨询

问题原因排查
  • geom_tile无显示的核心原因:
    • geom_tile要求数据为规则网格格式,你的原始数据是离散点位(经纬度未构成均匀网格),没有匹配的网格单元格坐标,因此无法渲染出瓦片图层;单独绘制空白也源于此。
    • 需检查aes映射是否正确:必须明确指定x(经度)、y(纬度)、fill(温度),映射错误也会导致无显示。
  • geom_raster报错原因:
    geom_raster同样依赖规则网格结构,当你的经纬度离散且分布不均时,它无法自动生成连续网格,因此触发点位分布相关报错。
可行解决方案与推荐函数

针对离散点位的温度热力图需求,推荐以下几种实用方法:

1. 使用stat_density_2d实现加权热力图

适合结合温度权重展示区域热力密度,可直接基于离散点生成:

library(ggmap)
library(ggplot2)

# 假设数据框为df,包含lon(经度)、lat(纬度)、temp(温度)列
get_map(location = c(min(df$lon), min(df$lat), max(df$lon), max(df$lat)), 
        maptype = "roadmap", source = "google") %>%
  ggmap() +
  stat_density_2d(data = df, aes(x = lon, y = lat, fill = stat(density), weights = temp),
                  geom = "polygon", contour = TRUE, alpha = 0.6) +
  scale_fill_viridis_c(option = "plasma", name = "温度热力密度")

2. 插值生成规则网格后用geom_tile绘制

先用插值工具将离散点转换为规则网格,再用geom_tile渲染:

library(akima)
library(ggplot2)
library(ggmap)
library(tidyr)

# 生成经纬度网格序列
lon_seq <- seq(min(df$lon), max(df$lon), length.out = 100)
lat_seq <- seq(min(df$lat), max(df$lat), length.out = 100)

# 对温度进行插值
interp_temp <- interp(x = df$lon, y = df$lat, z = df$temp, 
                      xo = lon_seq, yo = lat_seq, linear = TRUE)

# 转换为ggplot可用的数据框格式
interp_df <- as.data.frame(interp_temp) %>%
  pivot_longer(cols = -x, names_to = "y", values_to = "temp") %>%
  mutate(y = as.numeric(gsub("V", "", y))) %>%
  rename(lon = x, lat = y)

# 绘制热力图
get_map(location = c(min(df$lon), min(df$lat), max(df$lon), max(df$lat)), 
        maptype = "roadmap", source = "google") %>%
  ggmap() +
  geom_tile(data = interp_df, aes(x = lon, y = lat, fill = temp), alpha = 0.6) +
  scale_fill_gradient(low = "blue", high = "red", name = "温度")

注:插值会引入一定估计误差,可根据场景调整linear(线性)或cubic(三次)插值方式。

3. 用geom_point模拟热力效果

无需处理网格,直接通过点的颜色、大小映射温度,实现轻量化热力展示:

get_map(location = c(min(df$lon), min(df$lat), max(df$lon), max(df$lat)), 
        maptype = "roadmap", source = "google") %>%
  ggmap() +
  geom_point(data = df, aes(x = lon, y = lat, color = temp, size = temp), alpha = 0.7) +
  scale_color_gradient(low = "green", high = "red") +
  scale_size(range = c(2, 8))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:30:02