2

我绘制了 2 个 fasta 序列的点图(使用 seqinr 包中的 dotPlot()),我需要从图中提取一些值(x,y)。Dotplot() 输出是一个图像一个通用的点图可能是这个

在此处输入图像描述

例如,我需要用紫色线表示的局部对齐的开始和结束值, 所以这里有一个例子

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

dotPlot(seq1,seq2, wsize = 2, wstep = 1, nmatch = 2, col = c("white", "green"), xlab = deparse(substitute(seq1)), ylab = deparse(substitute(seq2)))

在此处输入图像描述

  locator(n=2, type="p")
$x
[1] 27.18720 31.23263

$y
[1] 20.45222 24.65726

所以我想要两个圆圈点的位置,你可以看到locator()给出的十进制值。我可以使用ceiling(),或者round()但我可能会得到一个近似错误

我需要我点击的点的整数值,基本上是离该地点最近的点

非常适合使用identify(),它适用于“正常”图,并返回一个与您的“点击”最接近的绘制值的向量,但它不适用于 dotPlot() 输出(问题似乎是它没有'不能将图像输出作为 locator() )

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

4

2 回答 2

0

正如您所提到Identify的那样不起作用,因为它需要一个情节而不是图像。也许一个解决方案是调用imageafterplot(type="n",..)但这需要更改dotPlot函数源代码。另一个优雅的解决方案是使用lattice包和panel.identify网格等效的identify.

这是一个示例,我选择了一些点(6 -> 15):

library(lattice)
dotplot(y~x,data.frame(x=letters,y=letters))
trellis.focus("panel", 1, 1)
> panel.identify()
 [1]  6  7  8  9 10 11 12 13 14 15

在此处输入图像描述

于 2013-10-31T12:37:12.740 回答
0

evolvedmicrobe/dotplot在github上看看

https://github.com/evolvedmicrobe/dotplot/blob/master/R/plotters.R

它提供mkDotPlotDataFrame. 有了这个,您可以更好地获取匹配之间的坐标,例如使用identify.

于 2019-06-05T19:05:02.810 回答