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

基于第三变量填充的渐变热力图制作方法问询

基于自定义Z值的渐变热力图实现方案

要替代散点图,实现基于现有x/y坐标和0-1区间z值的平滑渐变热力图,核心思路是先对离散的z值做空间插值,生成连续网格数据后再绘图,这样既能避免geom_raster的生硬感,又能绕开stat_density_2d忽略z值的问题。以下是具体代码实现:

1. 准备数据与依赖包

先导入数据并加载所需工具包:

library(ggplot2)
library(akima) # 用于空间插值
library(dplyr)

# 你的示例数据
df <- tibble(
  x = c(63, 59, 55, 60),
  y = c(71, 67.5, 73.5, 61),
  z = c(1, 0.5, 0.33, 0.09)
)

2. 对Z值进行空间插值

原始离散点无法生成平滑热力图,用akima::interp生成连续网格:

# 生成插值后的网格数据,适当扩展边界避免边缘空白
interp_data <- interp(
  x = df$x,
  y = df$y,
  z = df$z,
  xo = seq(min(df$x)-2, max(df$x)+2, length.out = 100),
  yo = seq(min(df$y)-2, max(df$y)+2, length.out = 100),
  linear = TRUE # 线性插值,追求更平滑可改用spline
)

# 转换为ggplot兼容的格式
interp_df <- interp_data %>% 
  interp2xyz() %>% 
  as_tibble() %>% 
  rename(z = V3)

3. 绘制平滑渐变热力图

用插值后的数据配合geom_raster,开启插值选项提升美观度:

ggplot(interp_df, aes(x = x, y = y, fill = z)) +
  geom_raster(alpha = 0.8, interpolate = TRUE) # interpolate让色块边缘过渡自然
  # 可选:添加白色等高线增强层次感
  geom_contour(aes(z = z), color = "white", size = 0.5) +
  # 配置0-1区间的渐变配色
  scale_fill_viridis_c(
    limits = c(0, 1),
    breaks = seq(0, 1, 0.2),
    name = "Z值"
  ) +
  theme_minimal() +
  labs(x = "X轴", y = "Y轴") +
  coord_fixed() # 保持坐标轴比例一致

备选方案:填充等高线样式

如果想要类似密度图的分层渐变效果,可改用geom_contour_filled:

ggplot(interp_df, aes(x = x, y = y, z = z)) +
  geom_contour_filled(breaks = seq(0, 1, 0.1)) +
  scale_fill_viridis_d(name = "Z值") +
  theme_minimal() +
  labs(x = "X轴", y = "Y轴")

要点提示

  • length.out参数控制网格密度,数值越大热力图越平滑,按需调整;
  • 配色可自定义,比如用scale_fill_gradient(low = "lightblue", high = "darkred")替换默认配色;
  • 若数据量较大,可适当降低length.out值提升运行速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 06:40:31