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

前不久看到一篇发表在 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分别计数再合并起来统计绘图的,此外一个基因含有多个转录本,这个怎么处理呢?

大家可以去尝试一下。

欢迎小伙伴留言评论!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容