geom_tile图垂直对齐问题:多研究数据的ggplot2绘图需求
用ggplot2的geom_tile绘制多研究热力图
首先我帮你把数据生成的代码补全了,你之前给出的代码片段不完整,这里模拟生成三个研究的完整数据集,方便直接运行调试:
library(dplyr) library(ggplot2) set.seed(1) # 补全完整的代谢物类别列表 categories <- c("Peptide", "Amino Acid", "Nucleotide", "Xenobiotics", "Carbohydrate", "Cofactors and Vitamins", "Lipid", "Lysophospholipid", "Gamma-glutamyl Amino Acid", "Leucine Isoleucine and Valine Metabolism") # 生成包含三个研究的完整数据集 df <- expand.grid( category = categories, x = paste0("Sample_", 1:5), # 模拟x轴的样本/分组,可替换为你的真实x轴数据 study = paste0("Study_", 1:3) ) %>% mutate(score = rnorm(nrow(.), mean = 5, sd = 2)) # 模拟score值,替换成你的真实分数数据
接下来是绘制热力图的核心代码,这里用分面的方式展示三个研究的结果,确保每个研究的热力图独立清晰:
ggplot(df, aes(x = x, y = category, fill = score)) + geom_tile(color = "white", size = 0.5) + # 给瓦片加白色边框,增强区分度 facet_wrap(~study, ncol = 3) + # 三个研究横向分面展示 scale_fill_viridis_c(option = "plasma", name = "Score") + # 色盲友好的渐变配色 labs( x = "样本/分组", y = "代谢物类别", title = "不同研究的代谢物分数分布热力图" ) + theme_minimal() + theme( axis.text.x = element_text(angle = 45, hjust = 1), # x轴标签旋转45度,避免重叠 plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), strip.text = element_text(size = 12, face = "bold") )
关键细节说明:
expand.grid用来生成所有类别、x轴元素和研究的组合,确保每个研究都覆盖完整的变量维度- 如果你的x轴是连续数值(比如时间、浓度),只需要把x的生成代码换成连续变量即可,绘图逻辑完全通用
- 配色用了viridis色系,对色盲群体友好,也可以换成
scale_fill_gradient2来区分正负分数 - 主题部分调整了x轴标签角度,避免样本名过长导致的重叠问题,同时优化了标题和分面标签的样式
内容的提问来源于stack exchange,提问作者dan
相关产品推荐
相关产品推荐

