跟着NatureMetabolism学作图:R语言ggplot2画热图展示基因表达量

简介: 跟着NatureMetabolism学作图:R语言ggplot2画热图展示基因表达量

论文

Independent phenotypic plasticity axes define distinct obesity sub-types

https://www.nature.com/articles/s42255-022-00629-2#Sec15

s42255-022-00629-2.pdf

论文中没有公开代码,但是所有作图数据都公开了,我们可以试着用论文中提供的数据模仿论文中的图

今天的推文重复一下论文中的Fig3a 热图展示差异表达基因的表达量

image.png

论文中提供的数据没有上调下调的分组,这里我就随便选择数据了,两个热图之间的空白通过拼图的方式来实现

部分示例数据

image.png

总共553个基因,前300个标记为上调,后253个标记为下调

读取数据

library(readr)
dat<-read_delim("data/20220921/fig3a.txt",delim = "\t")
dim(dat)
colnames(dat)

dat01<-dat[1:300,]
dim(dat01)
dat02<-dat[301:553,]
dim(dat02)

第一个热图

library(ggplot2)
library(latex2exp)
library(tidyverse)

library(RColorBrewer)
cols<-colorRampPalette(rev(brewer.pal(n = 7, name =
                                        "RdYlBu")))(100)

dat01 %>% 
  pivot_longer(-gene_id,
               names_to = "treatment",
               values_to = "expre") -> dat01.1

dat01.1$treatment<-factor(dat01.1$treatment,
                          levels = colnames(dat01))

ggplot(data=dat01.1,
       aes(x=treatment,y=gene_id))+
  geom_tile(aes(fill=expre))+
  theme(axis.text = element_blank(),
        axis.ticks = element_blank())+
  labs(x=NULL,y=TeX(r"(\overset${\textit{Nnat}{^+}{^/}{^-}{^p}-\textit{Heavy}}{upregulated}$)"))+
  scale_fill_gradientn(colours = cols,
                       breaks=c(-1.6,-0.6,0.5,1.4,2.3),
                       labels=c(-2,-1,0,1,2),
                       name=NULL)+
  guides(fill=guide_colorbar(barheight = 25))+
  theme(panel.background = element_blank())

image.png

第二个热图

dat02 %>% 
  pivot_longer(-gene_id,
               names_to = "treatment",
               values_to = "expre") -> dat02.1

dat02.1$treatment<-factor(dat02.1$treatment,
                          levels = colnames(dat01))

ggplot(data=dat02.1,
       aes(x=treatment,y=gene_id))+
  geom_tile(aes(fill=expre))+
  theme(axis.text = element_blank(),
        axis.ticks = element_blank())+
  labs(x=NULL,y=TeX(r"(\overset${\textit{Nnat}{^+}{^/}{^-}{^p}-\textit{Heavy}}{downregulated}$)"))+
  scale_fill_gradientn(colours = cols,
                       breaks=c(-1.6,-0.6,0.5,1.4,2.3),
                       labels=c(-2,-1,0,1,2),
                       name=NULL)+
  guides(fill=guide_colorbar(barheight = 25))+
  theme(panel.background = element_blank(),
        legend.position = "none")

image.png

顶部表示分组的信息,用柱形图来展示

ggplot()+
  geom_rect(aes(xmin=0.5,xmax=3.5,ymin=0.5,ymax=1.5),
            fill="#c1bebf")+
  geom_rect(aes(xmin=3.5,xmax=6.5,ymin=0.5,ymax=1.5),
            fill="#71cddd")+
  geom_rect(aes(xmin=6.5,xmax=9.5,ymin=0.5,ymax=1.5),
            fill="#3a54a3")+
  theme(axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.background = element_blank(),
        axis.title = element_blank())+
  geom_text(aes(x=2,y=1.6),vjust=1,
            label=TeX(r"(\overset${WT}$)"))+
  geom_text(aes(x=5,y=1.6),vjust=0.7,
            label=TeX(r"(\overset${\textit{Nnat}{^+}{^/}{^-}{^p}}{\textit{Light}}$)"))+
  geom_text(aes(x=8,y=1.6),vjust=0.7,
            label=TeX(r"(\overset${\textit{Nnat}{^+}{^/}{^-}{^p}}{\textit{Heavy}}$)"))

image.png

本来是想用拼图的方式把3个图组合到一起的,但是遇到了点问题,暂时不知道是什么原因了,可以把第三个图的代码叠加到第一个图上

p1+
  geom_rect(aes(xmin=0.5,xmax=3.5,ymin=305.5,ymax=310.5),
            fill="#c1bebf",
            inherit.aes = FALSE)+
  geom_rect(aes(xmin=3.5,xmax=6.5,ymin=305.5,ymax=310.5),
            fill="#71cddd",
            inherit.aes = FALSE)+
  geom_rect(aes(xmin=6.5,xmax=9.5,ymin=305.5,ymax=310.5),
            fill="#3a54a3",
            inherit.aes = FALSE)+
  theme(plot.margin = unit(c(1.5,1,1,1),'lines'))+
  annotate(geom="text",x=2,y=335.6,vjust=1,
            label=TeX(r"(\overset${WT}$)"))+
  annotate(geom="text",x=5,y=335.6,vjust=0.7,
            label=TeX(r"(\overset${\textit{Nnat}{^+}{^/}{^-}{^p}}{\textit{Light}}$)"))+
  annotate(geom="text",x=8,y=335.6,vjust=0.7,
            label=TeX(r"(\overset${\textit{Nnat}{^+}{^/}{^-}{^p}}{\textit{Heavy}}$)"))+
  coord_cartesian(clip = "off") -> p1.1
p1.1

最后再拼图

library(patchwork)
p1.1/p2+
  plot_layout(heights = c(4,2))

image.png

欢迎大家关注我的公众号

小明的数据分析笔记本

小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!
相关文章
|
4月前
|
数据可视化 数据挖掘 图形学
R语言基础可视化:使用ggplot2构建精美图形的探索
【8月更文挑战第29天】 `ggplot2`是R语言中一个非常强大的图形构建工具,它基于图形语法提供了一种灵活且直观的方式来创建各种统计图形。通过掌握`ggplot2`的基本用法和美化技巧,你可以轻松地将复杂的数据转化为直观易懂的图形,从而更好地理解和展示你的数据分析结果。希望本文能够为你探索`ggplot2`的世界提供一些帮助和启发。
|
4月前
|
数据可视化
R语言自定义图形:ggplot2中的主题与标签设置
【8月更文挑战第30天】`ggplot2`作为R语言中功能强大的绘图包,其自定义能力让数据可视化变得更加灵活和多样。通过合理使用`theme()`函数和`labs()`函数,以及`geom_text()`和`geom_label()`等几何对象,我们可以轻松创建出既美观又富有表达力的图形。希望本文的介绍能够帮助你更好地掌握`ggplot2`中的主题与标签设置技巧。
|
7月前
|
数据可视化 数据挖掘 索引
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码2
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码
|
7月前
|
存储 数据可视化 数据挖掘
R语言绘制圈图、环形热图可视化基因组实战:展示基因数据比较
R语言绘制圈图、环形热图可视化基因组实战:展示基因数据比较
|
7月前
|
存储 数据可视化 数据挖掘
R语言可视化:ggplot2冲积/桑基图sankey分析大学录取情况、泰坦尼克幸存者数据
R语言可视化:ggplot2冲积/桑基图sankey分析大学录取情况、泰坦尼克幸存者数据
|
7月前
|
存储 数据可视化 数据挖掘
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码1
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码
|
7月前
|
算法 数据可视化
R语言社区检测算法可视化网络图:ggplot2绘制igraph对象分析物种相对丰度
R语言社区检测算法可视化网络图:ggplot2绘制igraph对象分析物种相对丰度
|
7月前
r语言ggplot2误差棒图快速指南
r语言ggplot2误差棒图快速指南
|
7月前
|
数据可视化 定位技术 网络架构
R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群
R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群
|
7月前
|
数据可视化
R语言ggplot2 对Facebook用户数据可视化分析
R语言ggplot2 对Facebook用户数据可视化分析