Matlab 如何绘制DNA序列的基因图,比如ATGCCGCTGCGC?
我需要根据病毒的DNA序列生成一个随机游走,给定它的2k碱基对序列。序列看起来像“ATGCGTCGTAACGT”。这条路应该向右拐A,向左拐T,向上拐G,向下拐C。Matlab 如何绘制DNA序列的基因图,比如ATGCCGCTGCGC?,matlab,wolfram-mathematica,bioinformatics,dna-sequence,Matlab,Wolfram Mathematica,Bioinformatics,Dna Sequence,我需要根据病毒的DNA序列生成一个随机游走,给定它的2k碱基对序列。序列看起来像“ATGCGTCGTAACGT”。这条路应该向右拐A,向左拐T,向上拐G,向下拐C。 我如何使用Matlab、Mathematica或SPSS实现这一目的?并不是说我真的理解您想要的“图形”,而是这里有一个文字解释 以下代码不一定是最终形式。在我尝试改进任何东西之前,我想知道这是否正确 rls = {"A" -> {1, 0}, "T" -> {-1, 0}, &q
我如何使用Matlab、Mathematica或SPSS实现这一目的?并不是说我真的理解您想要的“图形”,而是这里有一个文字解释 以下代码不一定是最终形式。在我尝试改进任何东西之前,我想知道这是否正确
rls = {"A" -> {1, 0}, "T" -> {-1, 0}, "G" -> {0, 1}, "C" -> {0, -1}};
Prepend[Characters@"ATGCGTCGTAACGT" /. rls, {0, 0}];
Graphics[Arrow /@ Partition[Accumulate@%, 2, 1]]
三维选项
现在我知道您想要什么了,下面是第一个函数的打包版本:
genePlot[s_String] :=
Module[{rls},
rls =
{"A" -> { 1, 0},
"T" -> {-1, 0},
"G" -> {0, 1},
"C" -> {0, -1}};
Graphics[Arrow /@ Partition[#, 2, 1]] & @
Accumulate @ Prepend[Characters[s] /. rls, {0, 0}]
]
像这样使用它:
genePlot["ATGCGTCGTAACGT"]
假设序列
S
已经映射到整数数组*),那么根据规则R
,移动的实际计算是简单的:
R =
1 -1 0 0
0 0 1 -1
S =
1 2 3 4 3 2 4 3 2 1 1 4 3 2
T= cumsum(R(:, S), 2)
T =
1 0 0 0 0 -1 -1 -1 -2 -1 0 0 0 -1
0 0 1 0 1 1 0 1 1 1 1 0 1 1
*)您需要详细说明实际的顺序。它是表示为单个字符串,还是表示为单元格数组或其他形式?编辑:
假设序列表示为字符串,则将其映射为整数序列
S
,如:
r= zeros(1, 84);
r(double("ATGC"))= [1 2 3 4];
S= r(double("ATGCGTCGTAACGT"))
并绘制它:
plot([0 T(1, :)], [0 T(2, :)], linespec)
这里需要
linespec
。听起来你可能在谈论CGR,或者Joel Jefferey在1990年的论文中描述的基因序列的所谓混沌游戏表示法。以下是Mathematica中的一个实现:
cgrPic[s_String] := Module[
{},
chars = StringCases[s, "G"|"A"|"T"|"C"];
f[x_, "A"] := x/2;
f[x_, "T"] := x/2 + {1/2, 0};
f[x_, "G"] := x/2 + {1/2, 1/2};
f[x_, "C"] := x/2 + {0, 1/2};
pts = FoldList[f, {0.5, 0.5}, chars];
ListPlot[pts, AspectRatio -> Automatic]]
下面是如何将其应用于Mathematica的GenomeData
命令中的基因序列:
cgrPic[GenomeData["FAT4", "FullSequence"]]
你也可以试试这样的东西
RandomDNAWalk[seq_, path_] :=
RandomDNAWalk[StringDrop[seq, 1],
Join[path, getNextTurn[StringTake[seq, 1]]]];
RandomDNAWalk["", path_] := Accumulate[path];
getNextTurn["A"] := {{1, 0}};
getNextTurn["T"] := {{-1, 0}};
getNextTurn["G"] := {{0, 1}};
getNextTurn["C"] := {{0, -1}};
ListLinePlot[
RandomDNAWalk[
StringJoin[RandomChoice[{"A", "T", "C", "G"}, 2000]], {{0, 0}}]]
我以前不知道马克·麦克卢尔(Mark McClure)关于基因序列混沌博弈表示的文章,但它让我想起了Jose Manuel Gutiérrez(Mathematica Journal第9卷第2期)的一篇文章,该文章还为使用DNA序列(四个碱基)的IFS提供了混沌博弈算法。详细说明见(原文) 该方法可用于生成如下图。为了好玩,我(在RHS面板中)加入了由相应互补DNA链(cDNA)生成的图
- 小鼠线粒体DNA(LHS)及其功能 互补链(cDNA)(RHS)
- 人类β-珠蛋白区(LHS)及其cDNA(RHS)
你所需要的就是注册号!(‘未知’核苷酸,如“R”可能需要清除)(我使用的是Mma v7) 最初的默示(稍加修改)(由何塞·曼努埃尔·古铁雷斯撰写) 重要更新 根据马克·麦克卢尔的建议,我已将
Point/@Orbit[s,Union[s]
更改为Point@Orbit[s,Union[s]]
这大大加快了速度请参见下面马克的评论
Orbit[s_List, {a_, b_, c_, d_}] :=
OrbitMap[s /. {a -> {0, 0}, b -> {0, 1}, c -> {1, 0},
d -> {1, 1}}];
OrbitMap =
Compile[{{m, _Real, 2}}, FoldList[(#1 + #2)/2 &, {0, 0}, m]];
IFSPlot[s_List] :=
Show[Graphics[{Hue[{2/3, 1, 1, .5}], AbsolutePointSize[2.5],
Point @ Orbit[s, Union[s]]}], AspectRatio -> Automatic,
PlotRange -> {{0, 1}, {0, 1}},
GridLines -> {Range[0, 1, 1/2^3], Range[0, 1, 1/2^3]}]
这是一个蓝色的情节。对于绿色,将色调[]更改为色调[{1/3,1,1,5}]
下面的代码现在生成第一个绘图(用于小鼠线粒体DNA)
为了得到cDNA图,我使用了以下转换规则(还更改了色调设置)
感谢并帮助从NCBI站点直接导入序列
为了清楚起见,把事情分开一点
导入序列
mouseMitoFasta=Import["http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=342520&rettype=fasta&retmode=text","Data"];
Mathematica J.原始文章中给出的导入序列的方法已注明日期
一张漂亮的支票
First@mouseMitoFasta
输出:
{>gi|342520|gb|J01420.1|MUSMTCG Mouse mitochondrion, complete genome}
{16295,{A,C,G,T},{{G,2011},{T,4680},{A,5628},{C,3976}}}
基础列表的生成
mouseMitoBases=Flatten@Characters@Rest@mouseMitoFasta
{Length@mouseMitoBases, Union@mouseMitoBases,Tally@mouseMitoBases}
更多检查
mouseMitoBases=Flatten@Characters@Rest@mouseMitoFasta
{Length@mouseMitoBases, Union@mouseMitoBases,Tally@mouseMitoBases}
输出:
{>gi|342520|gb|J01420.1|MUSMTCG Mouse mitochondrion, complete genome}
{16295,{A,C,G,T},{{G,2011},{T,4680},{A,5628},{C,3976}}}
第二组图是以类似的方式从gi | 455025生成的。请注意,序列很长
{73308,{A,C,G,T},{{G,14785},{A,22068},{T,22309},{C,14146}}}
最后一个例子(包含265922 bp),也显示了迷人的“分形”对称性。(这些是通过IFSPlot
中的AbsolutePointSize[1]
生成的)
fasta文件的第一行:
{>gi | 328530803 | gb | AFBL01000008.1 |放线菌口腔分类群170 str.F0386 A|u spOraltaxon170F0386-1.0|u Cont9.1,全基因组鸟枪序列}
相应的cDNA图在RHS上再次以蓝色显示
最后,马克还提供了非常漂亮的情节(例如gi | 328530803),可以作为笔记本下载 这个问题似乎已经得到了很好的回答,但我想我要补充一点,您所描述的内容之前已经在一系列DNA序列数字表示方法的旗帜下发表过,这些方法在我们的 事实证明,DNA行走在实践中并不是很有用,但允许直观的可视化。我手头没有,但我想我的同事会非常乐意提供用于生成下图的Matlab代码
欢迎来到StackOverflow。你能举个例子吗?我觉得很难理解你想要什么。你是说如果你把这些点连接起来,一个独特的序列会在页面上形成一个独特的轨迹吗?如果是这样,这个轨迹就是goi
{73308,{A,C,G,T},{{G,14785},{A,22068},{T,22309},{C,14146}}}