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

如何在R中绘制热力图?运行代码时报错无法合并整数与字符列怎么解决

错误原因
  • 报错来自pivot_longer()步骤:你当前的代码是将除Localidad外的所有列都堆叠到value列中,但你的数据集里存在多种不同类型的列:No.是整数型、Mes是字符型、Esquema/Nombre等是字符型、X12.7是SI/NO字符型,不同数据类型的列无法合并为同一列,因此触发报错。
  • 额外隐含问题:你使用的scale_fill_distiller()是连续色阶,后续如果value列混入字符值也会导致ggplot绘图报错。
解决方案

你需要先明确热力图要展示的数值列范围,仅将需要的数值列进行长宽转换即可,提供两种常用适配写法:

写法1:手动排除不需要的非数值列

df %>% 
  # 排除编号、月份、行政区、机构类型、机构编号、机构名称、统计汇总类等非打分列
  pivot_longer(-c(No., Mes, Delegacion, Localidad, Esquema, Número, Nombre, Puntos.máximos, Puntos.alcanzados, X., No..de.Padres, Horas)) %>% 
  # 强制将value转为数值型,SI/NO这类字符值会自动转为NA,适配后续色阶设置
  mutate(value = as.numeric(value)) %>% 
  ggplot(aes(x = name, y = Localidad, fill = value)) + 
  geom_tile(colour="gray80", size=0.2) +
  geom_text(aes(label=value)) +
  theme_minimal() +
  scale_fill_distiller(palette = "YlGnBu", direction = -1, na.value = "white")

写法2:直接匹配选中需要转换的打分列

df %>% 
  # 直接选择所有以X开头的打分列进行长宽转换,不用手动逐个排除无关列
  pivot_longer(cols = starts_with("X"), names_to = "name", values_to = "value") %>% 
  mutate(value = as.numeric(value)) %>% 
  ggplot(aes(x = name, y = Localidad, fill = value)) + 
  geom_tile(colour="gray80", size=0.2) +
  geom_text(aes(label=value)) +
  theme_minimal() +
  scale_fill_distiller(palette = "YlGnBu", direction = -1, na.value = "white")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:36:08