ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

GEO数据库怎么做热图实战:从R语言代码到配色避坑指南

GEO数据库怎么做热图实战:从R语言代码到配色避坑指南

说实话,刚接触生信时我就卡在了画热图这步。

看着别人发文章里那些花花绿绿、层次分明的热图

自己折腾半天R studio,报错信息比论文还长。

其实,geo数据库怎么做热图并没有想象中那么玄乎

核心就两个词:预处理、聚类。

今天把我踩过的坑和最终跑通的流程分享出来。

不用那些花里胡哨的第三方包,只用原生函数。

首先得把数据弄干净。

GEO下回来的原始文件通常是TXT或者CSV。

记得要把那些非表达值的列删掉

比如Gene Symbol保留着做注释,Probe ID可以扔掉。

还要检查有没有缺失值

直接na.rm = TRUE处理一下就行

不然后面聚类直接崩给你看。

第二步是标准化

基因表达数据量级差异大,不标准化没法比。

我一般习惯用行均值居中,也就是scale(x, center=TRUE, scale=FALSE)。

这样每个基因都减去自己的平均值

突出相对表达差异,看着更直观。

如果你想做Z-score标准化

用行内均值和标准差归一化也可以

但要注意某些基因标准差为0的情况

代码里最好加个判断,避免除以零的警告。

很多人在这一步偷懒,直接丢进hclust。

结果画出来的热图全是噪音,看不出规律。

一定要先做层次聚类树状图看看效果。

如果叶子节点太碎,可能是聚类方法选错了。

试试方法="ward.D2"通常能聚得更紧凑。

距离度量用"euclidean"是最稳妥的。

别贪心用什么复杂的距离矩阵,容易出bug。

接下来是画图的环节。

很多人喜欢用pheatmap,确实方便

但我更推荐用ggridges加ggplot2组合

或者直接用base R的heatmap函数

虽然丑点,但绝对稳定,不会突然闪退。

我现在的习惯是写一个基础函数封装一下。

输入矩阵,输出PNG高清大图。

注意设置col = heat.colors()或者红蓝色系。

红蓝对比最强烈,审稿人一眼就能看明白

哪组高表达,哪组低表达。

关于GEO数据,还要特别提醒一下批次效应。

如果数据来自不同芯片平台

一定要先做批次校正,再用limma包里的removeBatchEffect。

否则画出来的热图只是反映了芯片型号差异

而不是真实的生物学差异。

这点很多初学者容易忽略

导致后续验证实验对不上,那才叫真头疼。

配色方案别乱用

千万别用彩虹色,那是小学生配色

红蓝双色调是最经典的

中间灰色过渡,高端又专业。

还有行名和列名的顺序

默认是从上到下、从左到右

有时候你想让特定样本在第一列

可以自己先对列名排序再传入绘图函数。

比如把对照组永远放在左边,处理组在右边。

这种细节决定了你图的叙事逻辑。

另外,图例大小和刻度方向也要调。

默认y轴反向,有时候看着别扭

用par(ask=FALSE)关闭询问窗口

再手动调整ylim和xlim范围

让图形比例更协调。

导出图片时,dpi设置成300以上

宽度至少8英寸,这样放Word里才清晰。

如果你用Rmd或者Quarto写报告

记得在code chunk里设置fig.width参数。

不然默认大小根本看不清基因名。

字体大小也很关键

小于10磅的字体在打印版里根本看不见

适当加大axis.text的cex参数。

最后检查一下基因注释是否完整。

如果基因太多,名字重叠看不清

可以选top 50个差异基因单独画一张

或者用自定义的基因ID替换。

不要舍不得删,精简才有力量。

画完热图,记得保存中间矩阵。

万一配色改坏了,不用重跑全流程

直接换个配色参数重绘即可。

这才是高效的工作流。

总之,geo数据库怎么做热图的本质是数据清洗和可视化技巧的结合。

工具不重要,逻辑清晰最重要。

别被复杂的函数名吓住

多读读Help文档里的Examples

真的比看某些烂大街的教程有用多了。

希望能帮到你少走弯路

做出让导师点头的专业图表。

返回列表