研究密码子偏向性的论文通常都会分析RSCU值,论文中通常会用堆积柱形图来展示RSCU的值,之前在论文里也看到过下面这幅图的形式展示RSCU分析的结果


堆积柱形图(stacked barplot)展示密码子偏向性的RSCU值_python模块 Rplot.png

之前也有人在公众号留言问过这幅图改如何实现,但是自己当时也不知道。今天看Y叔的公众号文章​aplot包:让你画出更复杂的图​,解决的主要问题是拼图的时候坐标轴对齐。

看过这篇文章后突然想到展示密码子偏向性RSCU值的这幅图可以借助拼图来实现,下面介绍自己的实现过程。

首先是计算RSCU值

我借助python中的CAI模块实现

​​

​​​​

使用pip直接安装

pip install CAI

计算RSCU值

from CAI import RSCU
from Bio import SeqIO
seqs = [rec.seq for rec in SeqIO.parse('codon_usage_example.fasta','fasta')]
rscu = RSCU(seqs)

rscu是一个字典,密码子是键,对应的RSCU是值

写一个简单的脚本获得使用R语言的ggplot2作图的输入文件

from CAI import RSCU
from Bio import SeqIO
c2aa = {
'TGT':'Cys',
'UGU':'Cys',
'TGC':'Cys',
'UGC':'Cys',
'GAT':'Asp',
'GAU':'Asp',
'GAC':'Asp',
'GAC':'Asp',
'TCT':'Ser',
'UCU':'Ser',
'TCG':'Ser',
'UCG':'Ser',
'TCA':'Ser',
'UCA':'Ser',
'TCC':'Ser',
'UCC':'Ser',
'AGC':'Ser',
'AGC':'Ser',
'AGT':'Ser',
'AGU':'Ser',
'CAA':'Gln',
'CAA':'Gln',
'CAG':'Gln',
'CAG':'Gln',
'ATG':'Met',
'AUG':'Met',
'AAC':'Asn',
'AAC':'Asn',
'AAT':'Asn',
'AAU':'Asn',
'CCT':'Pro',
'CCU':'Pro',
'CCG':'Pro',
'CCG':'Pro',
'CCA':'Pro',
'CCA':'Pro',
'CCC':'Pro',
'CCC':'Pro',
'AAG':'Lys',
'AAG':'Lys',
'AAA':'Lys',
'AAA':'Lys',
'ACC':'Thr',
'ACC':'Thr',
'ACA':'Thr',
'ACA':'Thr',
'ACG':'Thr',
'ACG':'Thr',
'ACT':'Thr',
'ACU':'Thr',
'TTT':'Phe',
'UUU':'Phe',
'TTC':'Phe',
'UUC':'Phe',
'GCA':'Ala',
'GCA':'Ala',
'GCC':'Ala',
'GCC':'Ala',
'GCG':'Ala',
'GCG':'Ala',
'GCT':'Ala',
'GCU':'Ala',
'GGT':'Gly',
'GGU':'Gly',
'GGG':'Gly',
'GGG':'Gly',
'GGA':'Gly',
'GGA':'Gly',
'GGC':'Gly',
'GGC':'Gly',
'ATC':'Ile',
'AUC':'Ile',
'ATA':'Ile',
'AUA':'Ile',
'ATT':'Ile',
'AUU':'Ile',
'TTA':'Leu',
'UUA':'Leu',
'TTG':'Leu',
'UUG':'Leu',
'CTC':'Leu',
'CUC':'Leu',
'CTT':'Leu',
'CUU':'Leu',
'CTG':'Leu',
'CUG':'Leu',
'CTA':'Leu',
'CUA':'Leu',
'CAT':'HIS',
'CAU':'HIS',
'CAC':'HIS',
'CAC':'HIS',
'CGA':'Arg',
'CGA':'Arg',
'CGC':'Arg',
'CGC':'Arg',
'CGG':'Arg',
'CGG':'Arg',
'CGT':'Arg',
'CGU':'Arg',
'AGG':'Arg',
'AGG':'Arg',
'AGA':'Arg',
'AGA':'Arg',
'TGG':'Trp',
'UGG':'Trp',
'GTA':'Val',
'GUA':'Val',
'GTC':'Val',
'GUC':'Val',
'GTG':'Val',
'GUG':'Val',
'GTT':'Val',
'GUU':'Val',
'GAG':'Glu',
'GAG':'Glu',
'GAA':'Glu',
'GAA':'Glu',
'TAT':'Tyr',
'UAU':'Tyr',
'TAC':'Tyr',
'UAC':'Tyr',
}


seqs = [rec.seq for rec in SeqIO.parse('codon_usage_example.fasta','fasta')]

rscu = RSCU(seqs)

fw = open('rscu.txt','w')
amino_acid = {}
for aa,bb in rscu.items():
if c2aa[aa] not in amino_acid:
amino_acid[c2aa[aa]] = 6
else:
amino_acid[c2aa[aa]] -= 0.5
print(aa,c2aa[aa],round(bb,3),amino_acid[c2aa[aa]])
fw.write(aa+","+c2aa[aa]+","+str(round(bb,3))+","+str(amino_acid[c2aa[aa]])+"\n")

fw.close()

获得的rscu.txt四列


  • 第一列是密码子
  • 第二列是对应的氨基酸
  • 第三列是RSCU值
  • 第四列是数字,用来填充颜色和控制位置

接下来是ggplot2作图代码

install.packages('aplot')
library(ggplot2)
library(aplot)
df<-read.csv('rscu.txt',header=F,stringsAsFactors = F)
p1<-ggplot(df,aes(fill=as.character(V4),x=V2,y=V3))+
geom_bar(position = "stack",stat="identity")+
theme_bw()+scale_y_continuous(expand=c(0,0),
limits = c(0,6.2))+
theme(legend.position = "none")+labs(y="RSCU",x="")
#geom_text(aes(label=V1),position=position_stack(vjust=0.5))
p1
p2<-ggplot(df,aes(x=V2,y=V4))+
geom_label(aes(label=V1,fill=as.character(V4)),
size=2)+
labs(x="",y="")+ylim(3.4,6.1)+
theme_minimal()+
theme(legend.position = "none",
axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid = element_blank())
p1%>%
insert_bottom(p2,height = 0.3)

这样就得到了开头提到的图


堆积柱形图(stacked barplot)展示密码子偏向性的RSCU值_公众号_02 Rplot.png

还发现了一个R包可以分析密码子偏向性

sscu​,具体用法没看,用到再说

还发现了一个网站分析密码子偏向性

​​

​​​​

还看到了一个python模块可以把对应的蛋白质序列弄回核苷酸序列,不知道什么情况下会用到

​​

​​​​

欢迎大家关注我的公众号

小明的数据分析笔记本

堆积柱形图(stacked barplot)展示密码子偏向性的RSCU值_数据_03 公众号二维码.jpg

需要示例数据和代码的可以关注公众号留言哈!

也欢迎大家到B站 ​​https://space.bilibili.com/355787260​​​​

关注我,有时间会把这些文字内容录制成视频发布到b站的