手把手教你绘制染色体结构图

1引言

图片

上面这张图想必大家都见到过, 但是你有没有想过自己怎样去画一个这样的呢? 目前是有一些这样的包的,比如 GvizIdiogram 等。你知道这个图的意思是什么吗? 我也不知道, 于是去搜索了资料,做了一些功课。上面代表了 24 条染色体结构, 染色体上的颜色深度代表基因的密度,中间红色的地方代表着丝粒的位置。 既然知道了,是不是自己就可以手动来绘制这样的图了呢?

输入数据:

首先你得知道我们需要哪些数据来绘图:

  • 首先你需要每条染色体的大小
  • 还需要每条染色体着丝粒的位置
  • 然后你需要计算基因的密度
  • 最后绘图即可

数据从哪下呢,染色体大小你可以在 UCSC 官网下载,选择对应的基因组,找到 .chrom.sizes 结尾的即可:

图片

着丝粒 位置的数据可以参考推文 获取人类染色体长度及着丝粒(Centromere )和端粒(Telomere)位置, 接下来本文手把手教你绘制过程, 为了方便,我已包装了一些函数在 BioSeqUtils 里,直接调用即可。

2安装

重新安装获取新功能:

# install.packages("devtools")
devtools::install_github("junjunlab/BioSeqUtils")
library(BioSeqUtils)

3正文

我已经整理了 “hg19”, “hg38”, “mm10”, “mm39” 这些基因组的 染色体长度和着丝粒 的数据,直接加载即可。_ce_start_ 和 ce_end 是该染色体着丝粒的起始和终止位置, start 和 end 是染色体的起始和终止位置。

library(BioSeqUtils)
library(dplyr)

load("all_karyotype.rda")

# check
head(all_karyotype,3)

#    chr  ce_start    ce_end start       end type
# 1 chr1 121535434 124535434     0 249250621 hg19
# 2 chr2  92326171  95326171     0 243199373 hg19
# 3 chr3  90504854  93504854     0 198022430 hg19

unique(all_karyotype$type)
# [1] "hg19" "hg38" "mm10" "mm39"

你也可以使用 getChromSize 函数获取你自己基因组的长度:

myobj <- loadGenomeGTF(gtfPath = "hg38.ncbiRefSeq.gtf.gz",
                       genomePath = "hg38.fa")

## GenomeGTF object for Extracting sequences.
## GTF file is loaded.
## genome file is loaded.
## representTrans file is NULL.
## intron slot is NULL.

# get chromosome size
chromSize <- getChromSize(object = myobj)
head(chromSize)
#                 chr start       end
# 1                    chr1     0 248956422
# 2                   chr10     0 133797422
# 3                   chr11     0 135086622
# 4 chr11_KI270721v1_random     0    100316
# 5                   chr12     0 133275309
# 6                   chr13     0 114364328

你可以使用 prepareKaryotype 函数来整理成开头数据的格式,只需要提供染色体大小和着丝粒的位置文件, 如果没有丝粒的位置文件,则位置设置为 0。

prepareKaryotype(chromSize = chromSize,centromere = NULL) %>%
  head()

#                       chr start       end ce_start ce_end
# 1                    chr1     0 248956422        0      0
# 2                   chr10     0 133797422        0      0
# 3                   chr11     0 135086622        0      0
# 4 chr11_KI270721v1_random     0    100316        0      0
# 5                   chr12     0 133275309        0      0
# 6                   chr13     0 114364328        0      0

数据得保证你的染色体名称和 gtf 注释文件是一样的,要么都是 chr 开头,要么都没有。使用getGeneDensiy 函数来计算染色体上基因的参数,需要上面准备的 karyotype 文件和 注释文件feature参数指定计算的指标,默认是 transcript,如果你的注释文件 type 列有 gene,你也可以指定它, step 参数指定将染色体分割的窗口大小。

gtf_file <- myobj@gtf %>% as.data.frame()

# check
head(gtf_file[1:3,1:10])
#   seqnames start   end width strand                source       type score phase gene_id
# 1     chrM 15956 16023    68      - ncbiRefSeq.2022-10-28 transcript    NA    NA    TRNP
# 2     chrM 15956 16023    68      - ncbiRefSeq.2022-10-28       exon    NA    NA    TRNP
# 3     chrM 15888 15953    66      + ncbiRefSeq.2022-10-28 transcript    NA    NA    TRNT

karyotype.df <- all_karyotype %>% dplyr::filter(type == "hg38")
density.df <- getGeneDensiy(karyotype = karyotype.df,gtf = gtf_file,
                            feature = "transcript",
                            step = 10*10^6)

# check
head(density.df,3)

#    chr start   end type numGenes     density
# 1 chr1 1e+00 1e+07 hg38     1269 0.006625698
# 2 chr1 1e+07 2e+07 hg38     1007 0.005257744
# 3 chr1 2e+07 3e+07 hg38     1347 0.007032951

calcuCentromereData 计算着丝粒坐标,用来绘制中间三角形的区域。

# centromere data
centromere.triangle <- calcuCentromereData(karyotype.df)

# check
head(centromere.triangle,3)
#    chr         x   y
# 1 chr1 121700000 0.0
# 2 chr1 121700000 1.0
# 3 chr1 123400000 0.5

drawChromosome 函数来绘图, 绘制所有染色体结构:

# plot
drawChromosome(karyotype_file = karyotype.df,
               centromereTri_file = centromere.triangle,
               density_file = density.df,
               chromosomes = karyotype.df$chr,
               facet_params = list(scales = "fixed"))
图片

选择部分染色体绘制:

drawChromosome(karyotype_file = karyotype.df,
               centromereTri_file = centromere.triangle,
               density_file = density.df,
               chromosomes = c("chr1","chr2","chr3"),
               facet_params = list(strip_position = "left"))
图片

使用 zoom_region 来标注某个区域:

drawChromosome(karyotype_file = karyotype.df,
               centromereTri_file = centromere.triangle,
               density_file = density.df,
               chromosomes = c("chr1","chr2","chr3"),
               facet_params = list(strip_position = "left"),
               zoom_region = c(10^8,10^8+300000))
图片

放置在下面:

drawChromosome(karyotype_file = karyotype.df,
               centromereTri_file = centromere.triangle,
               density_file = density.df,
               chromosomes = c("chr1","chr2","chr3"),
               facet_params = list(strip_position = "left"),
               zoom_region = c(10^8,10^8+300000),
               zoom_pos = "bottom")
图片

对不同染色体不同区域标注, zoom_relheight 设置相对高度:

drawChromosome(karyotype_file = karyotype.df,
               centromereTri_file = centromere.triangle,
               density_file = density.df,
               chromosomes = c("chr1","chr2","chr3"),
               facet_params = list(strip_position = "left"),
               zoom_region = list(chr1 = c(10^8,10^8+300000),
                                  chr2 = c(2*10^8 + 300000,2*10^8+900000),
                                  chr3 = c(0.1*10^8,0.1*10^8+450000)),
               zoom_pos = "bottom",
               zoom_relheight = 0.5)
图片

修改一下颜色:

drawChromosome(karyotype_file = karyotype.df,
               centromereTri_file = centromere.triangle,
               density_file = density.df,
               chromosomes = c("chr1","chr2","chr3"),
               facet_params = list(strip_position = "left"),
               zoom_region = list(chr1 = c(10^8,10^8+300000),
                                  chr2 = c(2*10^8 + 300000,2*10^8+900000),
                                  chr3 = c(0.1*10^8,0.1*10^8+450000)),
               zoom_pos = "bottom",
               centromere_col = "#FD841F",
               density_col = c("#CFF5E7","#0D4C92"),
               zoom_col = c("white","#FF8DC7"))
图片

4结尾

来了就去 github 点个赞吧!

  • https://github.com/junjunlab/BioSeqUtils
图片

欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群 (微信交流群需收取 20 元入群费用,一旦交费,拒不退还!(防止骗子和便于管理)) 。QQ 群可免费加入, 记得进群按格式修改备注哦。

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/90687.html

(0)
联系我们
联系我们
分享本页
返回顶部