在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
相关产品推荐
相关产品推荐

