美文网首页方法学# R绘图复现项目和流程
自己模仿画个-- m6A distribution on tra

自己模仿画个-- m6A distribution on tra

作者: 老俊俊的生信笔记 | 来源:发表于2021-06-17 18:43 被阅读0次
    前不久看到一篇发表在 Cell Reports 抗病毒和m6A相关的文章

    Post-transcriptional regulation of antiviral gene expression by N6-methyladenosine

    • 通讯作者是 Stacy M. Horner ,杜克大学医学中心的分子遗传学和微生物学助理教授

    文章里有几个图挺好看的,图注是 Read coverage plots ,红色线代表 IP ,黑色代表 Input ,线周围都有各自颜色的区间代表生物学重复的方差,黄色区间是鉴定到的 m6A peak 区域。

    image
    尝试以下模仿这种类似的图行用 ggplot2 绘制一个。

    假如有四个比对排序好的 bam 文件四个,[ Input1、Input2、IP1、IP2 ] 。( bam文件是比对到转录组序列上的 )

    • 首先获得每个 bam 的测序深度
    # 生成的文件比较大,-a 参数表示输入每个位置的测序深度
    $ samtools depth -a Input1.bam Input2.bam IP1.bam IP2.bam > test_depth.txt
    # 查看生成的文件内容
    $ less test.txt
    NUDT4_ENSG00000173598_ENST00000337179_440_983_9753      1       0       0       0       0
    NUDT4_ENSG00000173598_ENST00000337179_440_983_9753      2       0       0       0       0
    NUDT4_ENSG00000173598_ENST00000337179_440_983_9753      3       0       0       0       0
    

    第一列:[基因名[-[gene id]-[transcript id]-[cds_start]-[cds_stop]
    第二列:转录本位置
    第三列至第五列:各个 bam 文件的测序 depth

    • 随便挑选个 METTL3 基因出来画
    $ grep 'METTL3' test_depth.txt > mettl3_depth.txt
    $ less
    METTL3_ENSG00000165819_ENST00000298717_117_1857_1980    1       0       0       1       2
    METTL3_ENSG00000165819_ENST00000298717_117_1857_1980    2       0       0       5       3
    METTL3_ENSG00000165819_ENST00000298717_117_1857_1980    3       0       0       9       4
    

    step1、接下来在 Rstudio 里操作

    # 读入数据
    mettl3_depth <- read.delim("C:/Users/admin/Desktop/mettl3_depth.txt", header=FALSE)
    # 取出 input 和 ip 组
    input <- mettl3_depth[,c(1,2,3,4)]
    ip <- mettl3_depth[,c(1,2,5,6)]
    # 计算均值和标准差
    input$mean <- apply(input[,c(3,4)], 1, mean)
    input$sd <- apply(input[,c(3,4)], 1, sd)
    input$samp <- 'Input'
    
    ip$mean <- apply(ip[,c(3,4)], 1, mean)
    ip$sd <- apply(ip[,c(3,4)], 1, sd)
    ip$samp <- 'Ip'
    colnames(ip)[3:4] <- c('V3','V4')
    # 合并
    p_dat <- rbind(ip,input)
    # 查看最后合并后的数据
    head(p_dat)
                                                        V1 V2 V3 V4 mean        sd samp
    1 METTL3_ENSG00000165819_ENST00000298717_117_1857_1980  1  1  2  1.5 0.7071068   Ip
    2 METTL3_ENSG00000165819_ENST00000298717_117_1857_1980  2  5  3  4.0 1.4142136   Ip
    3 METTL3_ENSG00000165819_ENST00000298717_117_1857_1980  3  9  4  6.5 3.5355339   Ip
    4 METTL3_ENSG00000165819_ENST00000298717_117_1857_1980  4  9  5  7.0 2.8284271   Ip
    5 METTL3_ENSG00000165819_ENST00000298717_117_1857_1980  5  9  6  7.5 2.1213203   Ip
    6 METTL3_ENSG00000165819_ENST00000298717_117_1857_1980  6  9  6  7.5 2.1213203   Ip
    

    step2、准备好数据后可以绘图了

    # 加载需要的R包
    library(ggplot2)
    library(ggprism)
    # 绘图
    p1 <- ggplot(p_dat,aes(x=V2,y=mean)) +
      geom_rect(aes(xmin=117,ymin=-Inf,xmax=1857,ymax=Inf),fill='grey95',alpha=.35) +
      geom_line(aes(color=samp),size=1) +
      theme_prism(border = T,base_size = 16,base_line_size=1) +
      xlab('') + ylab('Read Coverage') +
      labs(title = 'MeRIP-seq read Distribution') +
      #主题细节调整
      theme(axis.title.y = element_text(size = 18),
            plot.title = element_text(,hjust = .5,size = 18),
            legend.position = c(0.1,0.9),
            legend.background = element_blank(),
            legend.text = element_text(size = 14,face = 'bold'),
            legend.key.width = unit(1.5,'cm'),
            legend.key.height = unit(1,'cm')) +
      # 给线添加方差区间
      geom_ribbon(aes(ymin=mean - sd,ymax=mean + sd,fill=samp),alpha=.3,show.legend = F) +
      # 调整颜色
      scale_color_manual(values = c('black','red')) +
      scale_fill_manual(values = c('black','red')) +
      # 添加黄色高亮区域(文章里应该是m6a存在的peak区域),我这随便选两个
      geom_rect(aes(xmin=650,ymin=-Inf,xmax=750,ymax=Inf),fill='yellow',alpha=.002) +
      geom_rect(aes(xmin=1400,ymin=-Inf,xmax=1600,ymax=Inf),fill='yellow',alpha=.002)
      
    p1
    
    image

    step3、接下来转录本的结构怎么画呢?这里还是使用 geom_rect 函数

    # 绘制转录本结构图
    p2 <- ggplot(p_dat,aes(x=V2,y=mean)) +
      # 绘制 5UTR 区
      geom_rect(aes(xmin=0,ymin=0.05,xmax=117,ymax=0.1),fill='grey50') +
      # 绘制 CDS 区
      geom_rect(aes(xmin=117,ymin=0.025,xmax=1857,ymax=0.125),fill='grey50') +
      # 绘制 3UTR 区
      geom_rect(aes(xmin=1857,ymin=0.05,xmax=1980,ymax=0.1),fill='grey50') +
      # 主题细节调整
      theme_classic() + xlab('METTL3') + ylab('') +
      theme_prism(border = F,base_size = 16) +
      scale_y_continuous(limits = c(0,0.2)) +
      theme(axis.line = element_line(colour = 'white'),
            axis.text  = element_text(colour = 'white'),
            axis.title.x = element_text(face = 'italic',vjust = 10),
            axis.ticks = element_line(colour = 'white')) +
      # 添加注释标签
      geom_text(aes(label="5'UTR",x=117/2,y=0.17),size=4) +
      geom_text(aes(label="CDS",x=(1857-117)/2 + 117,y=0.17),size=4) +
      geom_text(aes(label="3'UTR",x=(1980-1857)/2 + 1857,y=0.17),size=4)
      
    p2
    
    image

    step4、拼图

    # 加载拼图的包
    library(patchwork)
    p1 + p2 + plot_layout(ncol = 1, heights = c(8, 1))
    
    image

    emmm...,是不是有那个味道了,后续再 Ai 里稍微修一下就行了。

    绘图后记

    阅读这篇文献的 STAR METHODS 部分,发现作者绘图用的是一个 CovFuzze 的 python 脚本做的

    image image

    githup 网址 :https://github.com/al-mcintyre/CovFuzze

    安装方法:

    $ pip install covfuzze
    

    用法介绍:

    # required arguments:
      -o OUT, --out OUT     output prefix (incl. dir) 
      --bams BAMS [BAMS ...] 
                            bam files (separated by spaces) 
      --bed BED             bed file for region(s) of interest  
      -l LABELS [LABELS ...], --labels LABELS [LABELS ...] 
                            labels associated with bams - if replicates, use same 
                            labels
    # optional arguments:
      -h, --help            show this help message and exit 
      -g GENE, --gene GENE  gene name (default = GeneDoe) 
      --gtf GTF             gtf file for gene to plot cds as shaded regions separated by exon
      -p PEAKS, --peaks PEAKS 
                            bed file with peaks
      -n NSUBPLOTS, --nsubplots NSUBPLOTS 
                            number of subplots- bams will be split evenly based on 
                            the order given (default = 1) 
      --normalize           normalize by gene length/summed coverage (default = False)
      --scale               scale y axis separately for each subplot (default = False)
    
    

    用法示例:

    $ covfuzze -o ./zikvtest --bams zikv_test1.bam zikv_test2.bam --bed zikvPR.bed -l input input --gene zikvPR -n 1 
    

    出来的图是这样的

    image

    我研究了以下并不是很懂他这个画图的具体原理是什么,应该是根据比对到基因组上的 bam 文件,使用提供的 bed 位置信息计数再画图,暂时还不知道这个脚本怎么把5UTR、CDS、3UTR分别计数再合并起来统计绘图的,此外一个基因含有多个转录本,这个怎么处理呢?

    大家可以去尝试一下。

    欢迎小伙伴留言评论!

    相关文章

      网友评论

        本文标题:自己模仿画个-- m6A distribution on tra

        本文链接:https://www.haomeiwen.com/subject/bjocyltx.html