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