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

在R中绘制单列热图并添加左侧样本聚类标识矩形的方法

问题描述

我有一个数据框clust.labs,包含每个cell对应的得分value,以及和得分无关的聚类结果type。数据预览如下:

> head(clust.labs)
type value cell
1    1   0.3    1
2    1   0.5    2
3    1  -0.3    3
4    1   0.5    4
5    1   0.3    5
6    1   0.3    6

我想绘制一张单列热图:用单个列代表cell,按顺序排列样本,颜色表示得分value。目前用以下ggplot代码绘制,但希望把彩色区域压缩成单列,同时在左侧添加代表样本聚类type的矩形标识,该怎么实现?

ggplot(data = clust.labs, mapping = aes(x = type,
                                        y = cell,
                                        fill = value)) +
   geom_tile() +
   xlab(label = "Sample")
解决方案

可以通过双图层的方式实现:左侧绘制type的标识矩形,右侧绘制单列的得分热图,具体代码如下:

library(ggplot2)

ggplot(clust.labs) +
  # 左侧聚类type标识
  geom_tile(aes(x = "聚类分组", y = cell, fill = factor(type)), width = 0.8) +
  # 右侧单列得分热图
  geom_tile(aes(x = "得分", y = cell, fill = value), width = 0.8) +
  # 分别设置两个填充的颜色标度,避免冲突
  scale_fill_manual(name = "聚类类型", values = c("1" = "#999999"), inherit.aes = FALSE) +
  scale_fill_viridis_c(name = "得分值") +
  # 调整坐标轴与主题样式
  labs(x = "") +
  ylab("Cell编号") +
  theme_minimal() +
  theme(
    panel.grid = element_blank(),
    axis.text.y = element_blank(), # 不需要显示cell编号可保留,需要则删除此行
    axis.ticks.y = element_blank()
  )

关键说明

  • 两个geom_tile通过x参数固定位置,分别对应左侧的聚类标识和右侧的单列热图,保证y轴(cell顺序)完全对齐。
  • 使用inherit.aes = FALSE让scale_fill_manual只作用于左侧的聚类图层,避免和右侧的连续色标冲突。
  • 如果需要显示cell的编号,删除axis.text.y = element_blank()和axis.ticks.y = element_blank()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:15:31