跟着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

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

相关文章
|
9月前
|
搜索推荐 Linux Python
VET:一个基于R语言的VCF数据提取工具,支持按基因ID、物理位置、样品名称提取指定变异信息
VET:一个基于R语言的VCF数据提取工具,支持按基因ID、物理位置、样品名称提取指定变异信息
|
1天前
|
数据可视化 数据挖掘 索引
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码2
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码
|
1天前
|
存储 数据可视化 数据挖掘
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码1
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码
|
1天前
|
存储 数据可视化 数据挖掘
R语言绘制圈图、环形热图可视化基因组实战:展示基因数据比较
R语言绘制圈图、环形热图可视化基因组实战:展示基因数据比较
|
1天前
r语言ggplot2误差棒图快速指南
r语言ggplot2误差棒图快速指南
|
1天前
|
存储 数据可视化 数据挖掘
R语言可视化:ggplot2冲积/桑基图sankey分析大学录取情况、泰坦尼克幸存者数据
R语言可视化:ggplot2冲积/桑基图sankey分析大学录取情况、泰坦尼克幸存者数据
|
1天前
|
数据可视化 定位技术 网络架构
R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群
R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群
|
1天前
|
数据可视化
R语言ggplot2 对Facebook用户数据可视化分析
R语言ggplot2 对Facebook用户数据可视化分析
|
1天前
|
数据采集
R语言处理RNA等位基因不平衡(二)
该文档介绍了通过RNA测序数据检测和量化等位基因不平衡的R语言分析流程。首先,RNA测序技术用于研究基因表达的细微变化,包括等位基因特异性表达。接着,通过加载和预处理CSV文件中的计数数据,去除映射错误较多的位点,然后利用二项贝塔分布和优化统计模型(如L-BFGS-B方法)估计等位基因不平衡和分散参数。接下来,为每个基因整合位点信息,通过似然函数最小化计算等位基因不平衡程度,并进行似然比测试以确定显著性。最后,对P值进行FDR校正并输出结果到CSV文件。整个过程涉及数据过滤、建模和统计分析。
17 0
|
1天前
|
数据采集 数据处理
R语言处理DNA等位基因不平衡(一)
该文介绍了等位基因不平衡分析在生物信息学和基因组学中的应用,用于识别受选择压力的基因。等位基因不平衡指基因座上两个等位基因表达比例不均,可能因自然选择等因素引起。研究通过系统分析特定区域的等位基因不平衡,识别关键基因在生物过程或疾病中的作用。示例代码展示了如何处理和分析数据,包括导入数据、预处理、等位基因不平衡测试以及结果输出。该分析适用于DNA数据,未来将推出针对RNA的数据处理方法。
19 0

热门文章

最新文章