之前写了8篇推文详细介绍了complexheatmap
画热图,大家可以在公众号后台搜索即可看到!
超详细的R语言热图之complexheatmap系列1
前几天介绍了ggplot2
版本的韦恩图,说到现在R语言画图都在ggplot2
化,热图当然也不能例外!
今天介绍的ggheatmap
,国产R包,必须支持!
支持图层语法,也是把热图分为好几个部分,然后再拼起来,得到一个ggplot2
对象,最大的好处是方便拼图,因为生信文章里就喜欢把热图和其他图片拼一起。当然用PPT或者PS、AI拼都行,但是也有很多小伙伴喜欢把所有工作都放到R里面做。
- 安装
- 简介
- 使用
- 自定义热图
安装
代码语言:javascript复制# 2选1
install.packages("ggheatmap")
devtools::install_github("XiaoLuo-boy/ggheatmap")
简介
代码语言:javascript复制library(ggheatmap)
## 载入需要的程辑包:ggplot2
主要提供了三大主函数:
ggheatmap()
:画热图的主要函数ggheatmap_theme()
:设置各组件的主题ggheatmap_plotist()
:提取热图各组件
github主页上把ggheatmap()
这个函数的所有参数都列出来了,大家看看,我就不翻译了,名字非常直观!大家可以通过?ggheatmap
随时查阅。
使用
找一份差异基因表达矩阵,标准的表达矩阵即可,行是基因,列是样本。或者自己随便编一个数据。
代码语言:javascript复制alldiff <- readRDS("../000files/ggheatmap_diffgenes.rds")
dim(alldiff)
## [1] 400 156
alldiff[1:4,1:4]
## GSM2997711 GSM2997712 GSM2997713 GSM2997714
## LOC100294341 7.21163 7.304075 5.765185 3.98753
## FAM3B 3.38149 3.908970 3.441000 4.80719
## CCL23 4.59639 4.789240 5.040425 3.33198
## AOC1 4.28208 3.624910 4.227660 3.70914
# 方便演示,用部分数据
df <- alldiff[1:80,1:40] # 取80行,40列用于演示
基础使用很简单,都是一些常用的操作,比如标准化,聚类,改变颜色等。
代码语言:javascript复制# 修改颜色
ggheatmap(df,
scale = "row", # 标准化
cluster_rows = TRUE, # 行聚类
cluster_cols = TRUE, # 列聚类
legendName = "Gene Expression", # 图例名称
color = colorRampPalette(c("#2fa1dd", "white", "#f87669"))(100),
cluster_num = c(2,2),
tree_color_cols = c("steelblue","darkred"), # 聚类树颜色
tree_color_rows = c("steelblue","darkred"))
plot of chunk unnamed-chunk-4
接下来给这个热图添加注释条。
代码语言:javascript复制# 添加列注释条,40列,别搞错
col_anno <- data.frame(group1=sample(LETTERS[1:4],40,replace = T),
group2=sample(c("trt","con"),40,replace = T),
group3=sample(c("YES","NO"),40,replace = T)
)
rownames(col_anno) <- colnames(df)
# 添加行注释条,80行,别搞错
row_anno <- data.frame(info1=sample(c("good","bad"),80,replace = T),
info2=sample(c("up","done","none"),80,replace = T)
)
rownames(row_anno) <- rownames(df)
# 还需要给各个注释条准备颜色,注意数量要对应
g1_color <- c("#008B45FF","#631879FF","#008280FF","#1F77B4FF")
g2_color <- c("#EE0000FF","#008B45FF")
g3_color <- c("#EE7E80","#5D9AD3")
i1_color <- c("#98D352","#FF7F0E")
i2_color <- c("#EEA236FF","#46B8DAFF","#FF7F0EFF")
col_list <- list(group1 = g1_color,
group2 = g2_color,
group3 = g3_color,
info1 = i1_color,
info2 = i2_color
)
然后就是添加到热图中:
代码语言:javascript复制p <- ggheatmap(df,
scale = "row", # 标准化
cluster_rows = TRUE, # 行聚类
cluster_cols = TRUE, # 列聚类
legendName = "Gene Expression", # 图例名称
color = colorRampPalette(c("#2fa1dd", "white", "#f87669"))(100),
cluster_num = c(2,2),
tree_color_cols = c("steelblue","darkred"), # 聚类树颜色
tree_color_rows = c("steelblue","darkred"),
annotation_cols = col_anno,
annotation_rows = row_anno,
annotation_color = col_list
)
p
plot of chunk unnamed-chunk-6
自定义热图
这个热图和前面介绍过的aplot
拼热图类似,也是可以拆分成不同部分的,然后可以对每个部件进行自定义,支持ggplot2
的theme()
。
ggheatmap_plotlist(p)
plot of chunk unnamed-chunk-7
看,是不是很神奇,注释条,主体,legend,聚类树等都拆分出来了。然后就可以用ggplot2
语法进行自定义外观了。
而且还支持管道符%>%
操作哦!
library(magrittr)
p%>%
ggheatmap_theme(1:5,
theme =list(
# 热图主体外观
theme(axis.text.x = element_text(angle = 45,size = 6,vjust = 1,hjust = 1),
axis.text.y = element_text(colour = "red",face = "bold")),
# 图例外观
theme(legend.title = element_text(face = "bold")),
theme(legend.title = element_text(face = "bold")),
theme(legend.title = element_text(face = "bold")),
theme(legend.title = element_text(face = "bold"))
))
plot of chunk unnamed-chunk-8
怎么样,是不是很赞!还可以进行各种自定义,只要你对ggplot2
足够熟悉,就可以进行各种操作,因为本质上就是一个ggplot
对象,所以也可以和其他的ggplot
图形进行各种组合!
下面是一个小小的例子!
代码语言:javascript复制library(dplyr)
p2 <- ggplot(row_anno %>% mutate(xx=rownames(row_anno),
value=sample(50:200,80,replace = T)),
aes(x=value,y=xx,fill=info2)
)
geom_bar(stat = "identity")
scale_fill_manual(values = i2_color,guide=NULL)
scale_x_continuous(expand = c(0,0))
labs(x=NULL,y=NULL)
p2
image-20220508113223677
然后就是肆无忌惮的拼图!
代码语言:javascript复制library(aplot)
p1 %>% insert_right(p2,width = 0.3)
image-20220508113310119
怎么样?你说神奇不神奇!
调包虾的世界就是这么神奇,且好玩!