跟着 Cell 学作图 | 复杂热图(ComplexHeatmap)

heatmap_cell.jpg

今天我们复现一幅2020年发表在Cell上的热图

DOI:10.1016/j.cell.2020.07.009

22

读图

Snipaste_2022-04-21_09-49-27.png

将不同样本的基因表达情况用热图展示并将倍数变化条形图展示在右侧,除此之外我们还可以把P值映射在条形图的颜色上,因为没有下载到原始数据我们将会用示例数据进行教学。

示例数据和代码领取

详见:https://mp.weixin.qq.com/s/tZ10XYjNCCNbygCPsG5bUQ

绘制

数据准备

数据文件有三个table,一个表达矩阵文件expr.csv,一个差异检验结果文件t_test.csv,这里用的是t检验,一个分组信息文件group.csv。表达矩阵中有一些空值,我们直接用0把空值替换掉,group表中将group转化为因子变量。接下来我们把倍数变化P值信息都汇入到表达矩阵后方便后面绘图使用。

library(ComplexHeatmap)
library(circlize)
rm(list=ls())
expr=read.csv('expr.csv',header = T,row.names = 1)
t_test=read.csv('t_test.csv')
group=read.csv('group.csv',header = T,row.names = 1)
group$group=as.factor(group$group)
expr[is.na(expr)]=0
expr$FC=t_test$FC[match(rownames(expr),t_test$geneID)]#增加倍数变化列
expr$P.value=t_test$P.Value[match(rownames(expr),t_test$geneID)]#增加P值列
expr=expr[order(expr$FC,decreasing = T),]#按照倍数变化降序排列
heatmapdata=log(expr[1:30,1:70]+1)#取倍数变化前30的基因取对数作为热图数据
bardata=data.frame(FoldChange=expr$FC[1:30],row.names = rownames(expr)[1:30])#取FC数据做条形图

热图绘制

复杂热图需要用到Heatmap函数,其中的行注释和列注释都是需要用HeatmapAnnotation函数来生成,右侧的条形图实际上也属于行注释的一种,而注释信息的颜色映射则需要用到colorRamp2来生成颜色函数,我们首先生成行注释和列注释信息。

col_fun = colorRamp2(c( 0,0.5*max(heatmapdata),max(heatmapdata)), c( "white",'#FF99A3', "red"))#根据表达量的对数范围生成热图的颜色范围函数
col_fun_row=colorRamp2(c(min(expr$P.value[1:30]),0.05,max(expr$P.value[1:30])),c('#EC211C','#316CD7','blue'))#根据P值范围生成P值映射颜色范围
barcol=col_fun_row(expr$P.value[1:30])#生成所需基因的P值对应的颜色
names(barcol)=rownames(bardata[1:30,])
right_anno = rowAnnotation('FC(T/P)'=
                           row_anno_barplot(bardata[1:30,], 
                           width = unit(3, "cm"),#条形图高度
                           bar_width = 0.8, #条形图条的宽度
                           outline = FALSE, 
                           gp = gpar(fill = barcol,#条形图颜色
                                     lwd=1)))#条形图边框宽度
topanno=HeatmapAnnotation(df=group,#列注释
                          border = T,
                          show_annotation_name = F,
                          col = list(group=c('Tumor'='#5CB85C',
                                             'Normal'='#337AB7' )))

紧接着就是热图的绘制和图例的生成,在R中图例调整稍微有些复杂,建议生成图例后期在AI中进行调整。

Heatmap(heatmapdata,
        col = col_fun,
        cluster_columns = F,
        cluster_rows = F,
        row_names_side =  'left',#行注释置于左侧
        top_annotation = topanno,
        right_annotation = right_anno,
        show_heatmap_legend = T,
        show_column_names = F,
        border = T,
        rect_gp = gpar(col = "white", lwd = 1),#热图单元边框颜色和宽度
        row_names_gp = gpar(fontsize = 12),
        border_gp = gpar(lwd = 2),
        column_split = group,#按照分组来分隔热图
        column_gap = unit(2, "mm")#分隔间距
)

[图片上传失败...(image-80da51-1650511079983)]

热图基本的元素已经具备了,我们可以再为P值添加一个标签,再在AI中进行后期处理。

lgd = Legend(col_fun = col_fun_row,
             title = "P.Value", 
             direction = "horizontal",
             legend_width=unit(0.165,'npc'),
             at = c(0,0.01,0.05,0.1))
draw(lgd,x = unit(0.715, "npc"), y = unit(0.925, "npc"))
Snipaste_2022-04-20_21-29-57.png

往期内容

  1. (免费教程+代码领取)|跟着Cell学作图系列合集
  2. Q&A | 如何在论文中画出漂亮的插图?
  3. Front Immunol 复现 | 1. GEO数据下载及sva批次校正(PCA可视化)

[图片上传失败...(image-88523d-1650511079983)]

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容