首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >拯救老土的热图,99套配色大全来了

拯救老土的热图,99套配色大全来了

作者头像
小洁忘了怎么分身
发布2026-01-29 12:33:58
发布2026-01-29 12:33:58
5980
举报
文章被收录于专栏:生信星球生信星球

最近在筹备R语言画图课程,目前正在内测,因为只发了一下朋友圈和内部群就已经很多人了,就没有发在公众号。等我们根据内测的反馈打磨一番再拿出来给大家品鉴哦,可以蹲守!先抛个小彩蛋给大家看看!演示pheatmap + paletteer 一键提升热图逼格,附赠99 套配色清单。

0.示例数据

让我们先搞个示例数据,这是热图的帮助文档里的代码(?pheatmap)。

代码语言:javascript
复制
rm(list = ls())
library(pheatmap)
library(paletteer)
set.seed(315)
test = matrix(rnorm(200), 20, 10)
test[1:10, seq(1, 10, 2)] = test[1:10, seq(1, 10, 2)] + 3
test[11:20, seq(2, 10, 2)] = test[11:20, seq(2, 10, 2)] + 2
test[15:20, seq(2, 10, 2)] = test[15:20, seq(2, 10, 2)] + 4
colnames(test) = paste("Test", 1:10, sep = "")
rownames(test) = paste("Gene", 1:20, sep = "")

1.改造之前

标准的热图是长这样的:

代码语言:javascript
复制
pheatmap(test)

根据帮助文档调一下颜色是这样的:

代码语言:javascript
复制
library(RColorBrewer)
pheatmap(test,color = colorRampPalette(c("navy", "white", "firebrick3"))(100))

还是有点基础哈?还得调啊。

2.改造之后

为什么别人文章里的热图就花花绿绿那么有质感呢?因为他们使用了配色R包哦!

配色R包有非常多,但我在课堂上一直只讲一个,那就是paletteer!它和热图的配合是非常兼容的,举个栗子:

代码语言:javascript
复制
pheatmap(test,
         color = paletteer_c("ggthemes::Red-Green-White Diverging",n = 100))

引号里的内容是"配色R包::配色名称"。

是的,人的默认思维都是暖色调代表数值大,冷色调代表数值小,但这个配色呢,看图例就知道,默认的颜色是绿色代表数值大,红色代表数值小,实际应用应该让它反过来,设置direction = -1即可。

代码语言:javascript
复制
pheatmap(test,
         color = paletteer_c("ggthemes::Red-Green-White Diverging",
                             n = 100,direction = -1))

3.99种配色风格供君选择

"ggthemes::Red-Green-White Diverging"这样的配色名称,可以用tab补全出来,但是这么多种配色, 哪些适合做热图呢?

热图里如果数据有正负/高低两端,发散型配色(diverging)会更直观,中间的‘白/浅色’通常对应接近 0 或均值。发散型的配色(一共99种),是:

代码语言:javascript
复制
#View(palettes_c_names)
f = palettes_c_names[palettes_c_names$type=="diverging",]
ps = unique(paste(f$package,f$palette,sep = "::"));ps
代码语言:javascript
复制
##  [1] "ggthemes::Orange-Blue Diverging"              
##  [2] "ggthemes::Red-Green Diverging"                
##  [3] "ggthemes::Green-Blue Diverging"               
...(此处省略95行,可以自己用代码获取或者看下面热图的标题)                     
## [98] "scico::bamO"                                  
## [99] "scico::vanimo"

我非常贴心的做了全部的图,标题就是他们的配色,当你想要复现同款配色图,只需要把第2部分的配色风格换掉就可以。

注:为了拼图好看,我仅保留了热图主体和图例哈!放大可以看到标题!

4.补充:我怎么拼的图呢?

这里是高级玩家的快乐!lapply+自定义函数可以实现批量画图,patchwork则可以实现批量拼图,超棒的。

这个过程中可能会让装包,就要选择yes。

全是R语言技巧,以前是纯靠手艺,现在有AI的帮助大家可以很好的理解和实现啦!不过自己一点都不懂也是不行的,借用我萌老师的一句话:

工具有很多,但还是要看人怎么用。现在ai这么强,你让一个小学生去分析单细胞数据,他也是做不到的,当代码变得廉价,经验就会变得异常重要, 不然代码对不对也没法评判。

代码语言:javascript
复制
library(patchwork)
res = lapply(ps, function(nm) {
  ph = pheatmap(test,color = paletteer_c(nm,n = 100),silent = T,
                treeheight_row = 0,treeheight_col = 0,
                show_rownames = F,show_colnames = F,
                main = nm,)
  wrap_elements(full = ph$gtable)
})
#这里只展示前10张图
wrap_plots(res[1:10], ncol = 5)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信星球 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0.示例数据
  • 1.改造之前
  • 2.改造之后
  • 3.99种配色风格供君选择
  • 4.补充:我怎么拼的图呢?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档