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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:52:32