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

R语言heatmap函数报错:'x'必须为数值矩阵的问题咨询

解决R中热力图报错及数据类型转换问题

疑问1:报错中的'x'指代哪个变量?

报错里的x就是你传递给heatmap()函数的第一个参数——也就是data2。heatmap()函数对输入有严格要求:必须是纯数值型矩阵,但你用gather()把宽格式的Pitch_axis转换成了长格式的data.table,这个长格式数据里包含字符型的Team和variable列,完全不符合函数的输入要求,所以会抛出这个错误。

疑问2:转矩阵后观测值变成带引号的字符串,怎么解决?

你遇到这个问题,是因为直接对包含非数值列的长格式数据转矩阵时,R会自动把所有元素统一转换成字符型(因为字符型是兼容性最高的类型)。要解决这个问题,我们需要先把数据恢复成适合热力图的宽格式,再提取数值部分转换为矩阵:

方法1:从长格式data2处理

library(tidyr)
# 把长格式数据转回宽格式,行是球队,列是进攻区域
wide_data <- pivot_wider(data2, names_from = variable, values_from = value)
# 提取数值列并转成矩阵,同时设置行名为球队名称
heatmap_matrix <- as.matrix(wide_data[, -1])
rownames(heatmap_matrix) <- wide_data$Team
# 现在可以正常调用热力图函数了
heatmap(heatmap_matrix)

方法2:直接从原始Pitch_axis处理(更高效)

其实完全不需要先转成长期格式,直接从原始的宽格式tibble处理更简单:

# 提取数值列转矩阵,行名设为球队
heatmap_matrix <- as.matrix(Pitch_axis[, -1])
rownames(heatmap_matrix) <- Pitch_axis$Team
# 生成热力图
heatmap(heatmap_matrix)

额外推荐:用ggplot2绘制更美观的热力图

如果你想要更灵活美观的热力图,ggplot2支持直接用长格式数据绘制,不需要转矩阵:

library(ggplot2)
ggplot(data2, aes(x = variable, y = Team, fill = value)) +
  geom_tile(color = "white") + # 添加白色边框区分单元格
  scale_fill_gradient(low = "#f0f9e8", high = "#006d2c") + # 设置颜色渐变
  labs(x = "进攻区域", y = "球队", fill = "占比") +
  theme(axis.text.y = element_text(size = 7)) # 调整y轴球队名称的字体大小,避免重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:02:16