查看原文
其他

ggplot2版本的热图-方便拼图!

阿越就是我 医学和生信笔记 2023-06-15

关注公众号,发送R语言Python,获取学习资料!

  Stay hungry, stay foolish!   

之前写了8篇推文详细介绍了complexheatmap画热图,大家可以在公众号后台搜索即可看到!

超详细的R语言热图之complexheatmap系列1

前几天介绍了ggplot2版本的韦恩图,说到现在R语言画图都在ggplot2化,热图当然也不能例外!

今天介绍的ggheatmap,国产R包,必须支持!

支持图层语法,也是把热图分为好几个部分,然后再拼起来,得到一个ggplot2对象,最大的好处是方便拼图,因为生信文章里就喜欢把热图和其他图片拼一起。当然用PPT或者PS、AI拼都行,但是也有很多小伙伴喜欢把所有工作都放到R里面做。

  • 安装

  • 简介

  • 使用

  • 自定义热图

安装

# 2选1
install.packages("ggheatmap")

devtools::install_github("XiaoLuo-boy/ggheatmap")

简介

library(ggheatmap)
## 载入需要的程辑包:ggplot2

主要提供了三大主函数:

  • ggheatmap():画热图的主要函数
  • ggheatmap_theme():设置各组件的主题
  • ggheatmap_plotist():提取热图各组件

github主页上把ggheatmap()这个函数的所有参数都列出来了,大家看看,我就不翻译了,名字非常直观!大家可以通过?ggheatmap随时查阅。

使用

找一份差异基因表达矩阵,标准的表达矩阵即可,行是基因,列是样本。或者自己随便编一个数据。

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列用于演示

基础使用很简单,都是一些常用的操作,比如标准化,聚类,改变颜色等。

# 修改颜色
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

接下来给这个热图添加注释条。

# 添加列注释条,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
                 )

然后就是添加到热图中:

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拼热图类似,也是可以拆分成不同部分的,然后可以对每个部件进行自定义,支持ggplot2theme()

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图形进行各种组合!

下面是一个小小的例子!

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

然后就是肆无忌惮的拼图!

library(aplot)

p1 %>% insert_right(p2,width = 0.3)
image-20220508113310119

怎么样?你说神奇不神奇!

调包虾的世界就是这么神奇,且好玩!🤪

 


以上就是今天的内容,希望对你有帮助哦!欢迎点赞、在看、关注、转发

欢迎在评论区留言或直接添加我的微信!

 
End



欢迎关注公众号:医学和生信笔记

医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!


往期回顾

超详细的R语言热图之complexheatmap系列2


ggplot2变成Graphpad Prism样式:ggprims(05)


韦恩图进阶!upset plot 01


ggplot2版本的韦恩图画法


简单的韦恩图画法

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存