跟着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、生物信息学入门学习资料及自己的学习笔记!
相关文章
|
搜索推荐 Linux Python
VET:一个基于R语言的VCF数据提取工具,支持按基因ID、物理位置、样品名称提取指定变异信息
VET:一个基于R语言的VCF数据提取工具,支持按基因ID、物理位置、样品名称提取指定变异信息
|
数据可视化 数据挖掘 索引
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码2
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码
|
存储 数据可视化 数据挖掘
R语言绘制圈图、环形热图可视化基因组实战:展示基因数据比较
R语言绘制圈图、环形热图可视化基因组实战:展示基因数据比较
|
存储 数据可视化 数据挖掘
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码1
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码
|
数据可视化 定位技术 网络架构
R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群
R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群
|
数据采集
R语言处理RNA等位基因不平衡(二)
该文档介绍了通过RNA测序数据检测和量化等位基因不平衡的R语言分析流程。首先,RNA测序技术用于研究基因表达的细微变化,包括等位基因特异性表达。接着,通过加载和预处理CSV文件中的计数数据,去除映射错误较多的位点,然后利用二项贝塔分布和优化统计模型(如L-BFGS-B方法)估计等位基因不平衡和分散参数。接下来,为每个基因整合位点信息,通过似然函数最小化计算等位基因不平衡程度,并进行似然比测试以确定显著性。最后,对P值进行FDR校正并输出结果到CSV文件。整个过程涉及数据过滤、建模和统计分析。
160 0
|
数据采集 数据处理
R语言处理DNA等位基因不平衡(一)
该文介绍了等位基因不平衡分析在生物信息学和基因组学中的应用,用于识别受选择压力的基因。等位基因不平衡指基因座上两个等位基因表达比例不均,可能因自然选择等因素引起。研究通过系统分析特定区域的等位基因不平衡,识别关键基因在生物过程或疾病中的作用。示例代码展示了如何处理和分析数据,包括导入数据、预处理、等位基因不平衡测试以及结果输出。该分析适用于DNA数据,未来将推出针对RNA的数据处理方法。
219 0
|
数据可视化 数据挖掘 Linux
科研绘图丨使用R语言Pheatmap包快速绘制基因表达量热图的方法,支持聚类和配色自定义修改
科研绘图丨使用R语言Pheatmap包快速绘制基因表达量热图的方法,支持聚类和配色自定义修改
|
算法 数据可视化 Python
一种基于R语言tidyverse的算法:批量查找SNP位点连锁区内对应的QTL以及基因
一种基于R语言tidyverse的算法:批量查找SNP位点连锁区内对应的QTL以及基因
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。