从R中的fasta dotplot中提取值

时间:2013-10-24 15:31:00

标签: r

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

我尝试使用identify(),它使用“普通”图并使用图中点击的值返回一个向量,但它不适用于dotPlot。

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

2 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:1)

最后感谢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)

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