跟着Nature学作图:R语言ggplot2作图展示基因和转座子的相对位置

简介: 跟着Nature学作图:R语言ggplot2作图展示基因和转座子的相对位置

论文

The structure, function and evolution of a complete human chromosome 8

https://www.nature.com/articles/s41586-021-03420-7

今天的推文我们模仿一下论文中figure1c最下面的小图

image.png

我理解的这个图是给定一个区间,有区间内的转座子坐标,还有区间内的基因坐标,然后放到同一个图上展示,最上方一排是一些转座子,下面就是基因

画基因结构我们用ggtranscript这个R包,因为是ggplot2的扩展,所以叠加内容就相对容易了,最上方的转座子位置用geom_rect()函数来添加

安装ggtranscript

github主页
https://github.com/dzhang32/ggtranscript

devtools::install_github("dzhang32/ggtranscript")

准备基因的数据

这个是外显子的位置坐标

image.png

第一列是染色体号,第二三列是基因的起始位置,第四列是方向,第五列y是基因的放置位置,比如先把两个基因放到同一行,这个字符就是一样的,基因放到不同的行就写不同的字符,最后一列是基因的名字

这里有一个小知识点是excel里如果要把加减号当做普通字符输入需要在前面加一个单引号

转座子的数据

image.png

第一列和第二列是转座子的起始位置,第三列是y轴的位置,因为基因我是分为了两列,所以转座子的位置就给了3,如果基因有很多列,这个位置坐标也需要对应着改

加载需要用到的包

#devtools::install_github("dzhang32/ggtranscript")
library(ggtranscript)
library(ggplot2)
library(tidyverse)
library(readxl)

读取基因数据

df<-read_excel("D:/R_4_1_0_working_directory/env001/data/20230414/example.xlsx",
               sheet = "Sheet1")
df

生成基因名的位置坐标

df %>% 
  group_by(gene_name,y) %>% 
  summarise(min_value=min(start)) ->df.text

ggtranscript这个包里有一个函数是to_intron(),有了外显子的位置可以算内含子的位置

to_intron(df,group_var = "gene_name")

读取转座子的位置坐标

df.segment<-read_excel("D:/R_4_1_0_working_directory/env001/data/20230414/example.xlsx",
                       sheet = "Sheet2")

作图代码

ggplot()+
  geom_range(data=df,aes(xstart=start,xend=end,y=y,fill=gene_name),
             height=0.2,
             show.legend = FALSE)+
  scale_fill_manual(values = c("#aed4e9","#f4a69a","#3ba889","#4593c3"))+
  geom_intron(data=to_intron(df,group_var = "gene_name"),
              aes(xstart=start,
                  xend=end,
                  y=y,
                  strand=strand))+
  ggnewscale::new_scale_fill()+
  geom_text(data=df.text,aes(x=min_value,y=y,label=gene_name),angle=90,vjust=-1)+
  geom_rect(data=df.segment,aes(xmin=x1,xmax=x2,ymin=y,ymax=y+1,fill=group))+
  theme_bw()+
  theme(axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid = element_blank())+
  labs(x=NULL,y="New gene models")+
  theme(legend.position = c(0.8,0.2),
        legend.background = element_rect(color="black"),
        legend.direction = "horizontal",
        legend.key.width = unit(5,'mm'),
        axis.title.y = element_text(hjust = 0.25))+
  scale_fill_discrete(name=expression(underline("Repeat elements")))+
  guides(fill=guide_legend(title.position = "top",
                           title.hjust = 0.5))

image.png

基因名这样放如果不好看,可以放到基因的上方

df %>% 
  group_by(gene_name,y) %>% 
  summarise(min_value=mean(start)) -> df.text01


ggplot()+
  geom_range(data=df,aes(xstart=start,xend=end,y=y,fill=gene_name),
             height=0.2,
             show.legend = FALSE)+
  scale_fill_manual(values = c("#aed4e9","#f4a69a","#3ba889","#4593c3"))+
  geom_intron(data=to_intron(df,group_var = "gene_name"),
              aes(xstart=start,
                  xend=end,
                  y=y,
                  strand=strand))+
  ggnewscale::new_scale_fill()+
  geom_text(data=df.text01,aes(x=min_value,y=y,label=gene_name),vjust=-3,hjust=0)+
  geom_rect(data=df.segment,aes(xmin=x1,xmax=x2,ymin=y,ymax=y+1,fill=group))+
  theme_bw()+
  theme(axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid = element_blank())+
  labs(x=NULL,y="New gene models")+
  theme(legend.position = c(0.8,0.2),
        legend.background = element_rect(color="black"),
        legend.direction = "horizontal",
        legend.key.width = unit(5,'mm'),
        axis.title.y = element_text(hjust = 0.25))+
  scale_fill_discrete(name=expression(underline("Repeat elements")))+
  guides(fill=guide_legend(title.position = "top",
                           title.hjust = 0.5))

image.png

有的基因名的位置不是太合适,如何用代码调整到合适的位置暂时想不到了,出图后手动调整吧

示例数据和代码可以给推文点赞,然后点击在看,最后留言获取

欢迎大家关注我的公众号

小明的数据分析笔记本

小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!
小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!

微信公众号好像又有改动,如果没有将这个公众号设为星标的话,会经常错过公众号的推文,个人建议将 小明的数据分析笔记本 公众号添加星标,添加方法是

点开公众号的页面,右上角有三个点

image.png

点击三个点,会跳出界面

image.png

直接点击 设为星标 就可以了

相关文章
|
7月前
|
搜索推荐 Linux Python
VET:一个基于R语言的VCF数据提取工具,支持按基因ID、物理位置、样品名称提取指定变异信息
VET:一个基于R语言的VCF数据提取工具,支持按基因ID、物理位置、样品名称提取指定变异信息
|
7月前
|
存储 Go
速绘丨GO富集气泡图绘制方法,利用R语言ggplot2包快速绘制,完整脚本可重复绘图
速绘丨GO富集气泡图绘制方法,利用R语言ggplot2包快速绘制,完整脚本可重复绘图
|
7月前
|
数据可视化 数据挖掘 Linux
科研绘图丨使用R语言Pheatmap包快速绘制基因表达量热图的方法,支持聚类和配色自定义修改
科研绘图丨使用R语言Pheatmap包快速绘制基因表达量热图的方法,支持聚类和配色自定义修改
|
7月前
|
算法 数据可视化 Python
一种基于R语言tidyverse的算法:批量查找SNP位点连锁区内对应的QTL以及基因
一种基于R语言tidyverse的算法:批量查找SNP位点连锁区内对应的QTL以及基因
|
7月前
|
数据挖掘
R语言中如何进行PCA分析?利用ggplot和prcomp绘制基因表达量分析图(下)
R语言中如何进行PCA分析?利用ggplot和prcomp绘制基因表达量分析图(下)
|
7月前
R语言中如何进行PCA分析?利用ggplot和prcomp绘制基因表达量分析图(上)
R语言中如何进行PCA分析?利用ggplot和prcomp绘制基因表达量分析图
|
7月前
|
数据采集 数据可视化 数据挖掘
使用R语言绘制富集条形图,轻松分析基因表达数据
为了实现富集分析和绘制富集条形图,我们可以使用R语言。R语言是一种免费开源的编程语言和软件环境,用于统计计算,绘制图表和数据分析。它在大量生物信息学数据分析中得到应用,并成为当前技术最前沿的生物信息学研究领域。如此优势的R语言支持,是进行富集分析和富集条形图的理想之选。
240 0
|
7月前
|
数据采集 机器学习/深度学习 SQL
绝不可错过!R语言与ggplot2实现SCI论文数据分析神器
绝不可错过!R语言与ggplot2实现SCI论文数据分析神器
115 0
|
10月前
|
数据可视化 数据挖掘 定位技术
跟着Nature Communications学作图:R语言ggplot2画世界地图并用md语法添加文字标签
跟着Nature Communications学作图:R语言ggplot2画世界地图并用md语法添加文字标签
|
10月前
|
数据可视化 数据挖掘 Python
跟着Oncogene学作图:R语言gggenomes画桑基图
跟着Oncogene学作图:R语言gggenomes画桑基图

热门文章

最新文章