前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ggplot2版本的热图-方便拼图!

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

作者头像
医学和生信笔记
发布2022-11-15 09:29:30
2.2K1
发布2022-11-15 09:29:30
举报
文章被收录于专栏:医学和生信笔记

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

代码语言:javascript
复制
ggheatmap_plotlist(p)

plot of chunk unnamed-chunk-7

看,是不是很神奇,注释条,主体,legend,聚类树等都拆分出来了。然后就可以用ggplot2语法进行自定义外观了。

而且还支持管道符%>%操作哦!

代码语言:javascript
复制
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

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

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

以上就是今天的内容,希望对你有帮助哦!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 医学和生信笔记 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 简介
  • 使用
  • 自定义热图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档