1

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

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

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

4

2 回答 2

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)
于 2013-10-25T05:33:31.910 回答
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)

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

于 2013-10-26T02:13:31.637 回答