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

R语言ggplot2绘制热力图报错object 'X1' is not found如何解决

ggplot2绘制热力图报object 'X1' is not found的修复方案

问题场景

现有如下结构的数据框df,需要绘制热力图,用不同颜色方块展示数值,要求数值越高对应方块颜色越深:

team_1   team_2   team_3
very_effective   3        5        8
effective        5        6        9  
ineffective      6        8        20

运行如下代码时触发object 'X1' is not found报错:

library(ggplot2)
ggp <- ggplot(df, aes(X1, X2)) +                          
  geom_tile()
ggp 

报错原因

报错核心来自两个问题:

  1. aes()内引用的X1、X2并不是df中存在的列名,R无法在数据框里匹配到对应变量
  2. geom_tile()绘制热力图要求输入为长格式数据,当前df是宽格式:行索引为效果等级,列名为团队分组,没有单独拆分出x轴维度、y轴维度、填充数值三个绘图必须的字段,无法直接用于绘图。

修复方法

按如下步骤调整即可:

  • 先将数据框的行名转为独立的效果等级列,再把宽格式的team列转换为长格式,最终得到包含effect_level(效果等级,对应y轴)、team(团队,对应x轴)、score(数值,对应颜色填充)三列的长表
  • 在aes()中正确映射三个绘图属性,补充填充值的映射逻辑
  • 可根据需求调整坐标轴顺序、配色规则,保证数值越高方块颜色越深

完整可运行代码如下:

library(ggplot2)
library(tidyr)
library(tibble)

# 构造示例df
df <- data.frame(
  row.names = c("very_effective", "effective", "ineffective"),
  team_1 = c(3, 5, 6),
  team_2 = c(5, 6, 8),
  team_3 = c(8, 9, 20)
)

# 宽转长,适配ggplot2输入要求
df_long <- df |> 
  rownames_to_column(var = "effect_level") |> 
  pivot_longer(cols = starts_with("team_"), names_to = "team", values_to = "score")

# 绘制热力图
ggp <- ggplot(df_long, aes(x = team, y = effect_level, fill = score)) +
  geom_tile(color = "white") + # 加白色边框区分方块
  # 固定y轴顺序,从高效果到低效果排列
  scale_y_discrete(limits = c("very_effective", "effective", "ineffective")) +
  # 设置配色,数值越高颜色越深
  scale_fill_gradient(low = "#f7fbff", high = "#08306b")
ggp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:39:38