如何在ggplot热图中填充缺失类别(无需创建含0值新表)
无需新建含0值数据集,补全ggplot热图的缺失类别单元格
现有R语言数据集test:
test <- data.frame(week = c(rep(1, 3), rep(2, 2), rep(3,2)), category = c(letters[1:3], letters [1:2], letters[2:3]), value = runif(7, 0, 5))
该数据集中第2周缺少类别c,第3周缺少类别a。当前使用ggplot绘制热图的代码无法显示这些缺失的单元格:
ggplot(test, aes(week, category, fill = value)) + geom_tile(color = "black")
解决方案
借助tidyr::complete函数,在绘图流程中直接补全所有week与category的组合,无需单独创建并保存含0值的新数据表。代码如下:
library(ggplot2) library(tidyr) ggplot(complete(test, week, category), aes(week, category, fill = value)) + geom_tile(color = "black") + # 可选:为缺失值单元格设置填充颜色 scale_fill_viridis_c(na.value = "gray90")
说明
complete(test, week, category)会自动生成所有week和category的可能组合,缺失的value值保留为NA,不会强制填充0,完全满足需求。- 通过
scale_fill_*系列函数的na.value参数,可以自定义缺失值单元格的填充颜色,让热图的网格结构更完整清晰。
内容的提问来源于stack exchange,提问作者trilisser
相关产品推荐
相关产品推荐

