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

如何在R语言中创建平滑热力图?

实现R语言平滑热力图的方案

嘿,我懂你想要的那种平滑无边界的热力图效果——就是摆脱分箱/六边形的生硬感,呈现出连续渐变的密度分布对吧?用ggplot2的stat_density_2d系列图层就能轻松实现,下面给你几个适配你现有代码的方案:

保留你的基础配置

先把你已经写好的颜色和数据代码保留,不用改动:

# 颜色渐变设置
rf <- colorRampPalette(rev(brewer.pal(11,'Spectral')))
r <- rf(32)
# 生成模拟数据
x <- rnorm(mean=1.5, 5000)
y <- rnorm(mean=1.6, 5000)
df <- data.frame(x,y)

方法1:带密度轮廓的平滑填充热力图

这个方案会生成带密度层级轮廓的填充图,既有平滑渐变,又能清晰看到密度的分界:

p <- ggplot(df, aes(x,y))
smooth_hmap1 <- p + 
  stat_density_2d(aes(fill = after_stat(density)), geom = "polygon", contour = TRUE) +
  scale_fill_gradientn(colours = r) +
  theme_minimal() # 可选:让背景更简洁,突出热力图
smooth_hmap1
  • 关键说明:after_stat(density)用来提取计算后的密度值作为填充依据;geom="polygon"会根据密度轮廓生成连续的填充区域;contour=TRUE会绘制密度层级线,增强视觉层次感。

方法2:无轮廓的纯平滑热力图(更柔和)

如果想要完全没有边界的“模糊”感,可以使用栅格化的填充方式,视觉上更接近你想要的平滑效果:

smooth_hmap2 <- ggplot(df, aes(x,y)) +
  stat_density_2d(aes(fill = after_stat(density)), geom = "raster", contour = FALSE) +
  scale_fill_gradientn(colours = r) +
  coord_cartesian(expand = FALSE) + # 让填充铺满整个绘图区域,避免边缘空白
  theme_minimal()
smooth_hmap2

进阶调整:控制平滑程度

如果觉得默认的平滑度不够,可以通过adjust参数调整——数值越大,热力图越平滑:

smooth_hmap3 <- ggplot(df, aes(x,y)) +
  stat_density_2d(aes(fill = after_stat(density)), geom = "raster", contour = FALSE, adjust=1.5) +
  scale_fill_gradientn(colours = r) +
  coord_cartesian(expand = FALSE) +
  theme_minimal()
smooth_hmap3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:56:44