我有 2 个 fasta 序列的点图(使用 seqinr 包中的 dotPlot()),我需要从图中提取一些值(x,y)。
我尝试使用 identify(),它适用于“正常”图,并返回一个带有从图中单击的值的向量,但它不适用于 dotPlot。
欢迎任何可能的解决方案,包括在 shell 或 python 中使用 dotter。谢谢
我有 2 个 fasta 序列的点图(使用 seqinr 包中的 dotPlot()),我需要从图中提取一些值(x,y)。
我尝试使用 identify(),它适用于“正常”图,并返回一个带有从图中单击的值的向量,但它不适用于 dotPlot。
欢迎任何可能的解决方案,包括在 shell 或 python 中使用 dotter。谢谢
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)
最后感谢 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)
唯一的问题是它很慢而且情节中的“点”大小太大,它们都相互重叠,如果我对齐长序列,它将无法识别它们中的任何一个