【问题标题】:extracting values from fasta dotplot in R从R中的fasta点图中提取值
【发布时间】:2013-10-24 15:30:59
【问题描述】:

我有 2 个 fasta 序列的点图(使用 seqinr 包中的 dotPlot()),我需要从图中提取一些值 (x,y)。

我尝试使用 identify(),它适用于“正常”绘图并返回一个带有绘图中单击值的向量,但它不适用于 dotPlot。

欢迎任何可能的解决方案,包括在 shell 或 python 中使用 dotter。 谢谢

【问题讨论】:

  • 你有用于创建绘图的代码,还是只有一个图像文件?
  • 老实说我也不知道,我用的函数就是这个pbil.univ-lyon1.fr/software/SeqinR/SEQINR_CRAN/DOC/html/…
  • 它看起来像一个图像文件....但我不确定
  • 好的,您是单击 R 图形窗口中的绘图,还是单击从文件系统打开的 JPEG 或 PNG。您是否有权访问用于创建情节的代码,或者是其他人为您创建的?
  • 是的,我正在使用 identify() 函数单击 R 图形窗口中的图。该图是由 seqinr 包的 dotPlot() 函数创建的,因此我只提交要对齐的输入字符文件。感谢您的帮助

标签: r


【解决方案1】:

dotPlot 使用image 来绘制它的点。所以当identify 被调用时,没有“点”可以识别。如果您绘制这两个序列并使用与dotPlot 相同的逻辑,您将获得更大的成功。

seq2 <- seq1 <- paste(sample(c("A","G","T","C"), 100, repl=TRUE), collapse="")
for ( i in sample(1:100, 20) ) { seq2 <- 
  paste0(substr(seq2, 1, i-1), "Z", substr(seq2, i+1, nchar(seq2) ) )}
plot(NA, xlim=c(0,100), ylim=c(0,100)); 
for ( i in 1:100 ) { 
           if(substr(seq1,i,i)==substr(seq2, i,i) ){ points(i,i)}
pts <- identify(1:100, 1:100, n=5)

【讨论】:

  • 您的脚本有效,但我需要自动执行重复的动机搜索,因此我不仅要查找对角线,还要查找序列内的小对齐。例如类似的东西(vivo.colostate.edu/molkit/dnadot/retrodot.gif)我在想类似 seq1
  • Z 只是我插入的一个不匹配的字母。我想要比不匹配更多的匹配。我不从事遗传学研究,只是想说明identify 的“工作”能力,就像我在?dotPlot 示例中看到的那样。如果我要使用数据框来保存残基,我不会有 paste-d。
  • 这几乎是我所需要的,我需要将 seq1 的任何位置与 seq2 的任何位置进行比较,我将使用你的函数并尝试添加另一个 for 循环
  • 也许在 strsplit 上使用 split = "" 的“外部”。我现在在路上,你还没有提供一个可行的数据对象。也许问一个关于数据的新问题?
  • 好的,我会的,这是我的第一个问题
【解决方案2】:

最后感谢 DWin,我得到了我需要的东西

seq1 <- paste(sample(c("A","G","T","C"), 100, repl=TRUE), collapse="")
seq2 <- paste(sample(c("A","G","T","C"), 100, repl=TRUE), collapse="")

plot(NA, xlim=c(0,100), ylim=c(0,100),type="p"); 
for ( i in 1:100 ) 
    {  for ( j in 1:100 ) 
    {  if(substr(seq1,i,i)==substr(seq2, j,j) ) points(j,i)
       }}
pts <- identify(1:100, 1:100, n=5)

也可以

l=100
seq1 <- paste(sample(c("A","G","T","C"), l, repl=TRUE)) 
seq2 <- paste(sample(c("A","G","T","C"), l, repl=TRUE)) 
plot(NA, xlim=c(0,100), ylim=c(0,100),type="p"); 
for (i in 1:l) for (j in i:l) if(seq1[i]==seq2[j]) points(j,i)
pts <- identify(1:100, 1:100, n=5)

唯一的问题是它很慢,而且图中的“点”大小太大,它们都相互重叠,如果我对齐长序列,它将无法识别它们中的任何一个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2012-08-31
    • 1970-01-01
    • 2020-10-25
    相关资源
    最近更新 更多