0

我正处于规划一个需要在绘图内交互式移动十字准线的功能的早期阶段。以下是一些基本的图形调用,它们将以非常笨拙的方式完成此操作:

set.seed(9)
df <- data.frame(x = rnorm(10), y = rnorm(10))
plot(df)

abline(v = 0.5, h = 1.2, col = "red") # 'original' crosshairs
loc <- locator() # click location in plot, then ESC
abline(v = 0.5, h = 1.2, col = "transparent") # clear 'original' crosshairs
abline(h = loc$x[1], v = loc$y[2], col = "green") # crosshairs at new position

我需要的是能够以精确的方式控制十字准线的位置,并返回它们的位置。在上面的示例中单击并不能真正提供足够精细的控制。我希望能够使用键盘上的左右上下箭头来走动。但我不认为 R 以这种方式“听”lrud 键(即在图形窗口中时)。如果我错了,请纠正我。我可以想象这种工作的另一种方式是十字准线跟随光标直到单击或类似的东西。

所以我正在寻找一种策略来做到这一点,使用 R 中的数据。图形 pkg 无关紧要(base、ggplot2、lattice),数据和交互功能可能是其他语言,可能显示在网络中如果需要页面。我正在考虑一种较新的交互式图形方法,例如d3or shiny。我已经看了一些,但真的需要定期做这类事情的人来为我指明正确的方向。

我还需要缩放和注释的能力,但我可以在最终选择的任何框架内解决这些问题。但我提到这一点是为了让那些提供答案的人知道除了我特别提到的任务之外还有其他任务。因此,也许一种特定的方法会让人觉得是“必经之路”。最后,实际数据集会很大,因此速度是一个问题。

4

2 回答 2

2

试试这个:

set.seed(9)
df <- data.frame(x = rnorm(10), y = rnorm(10))
plot(df)

abline(v = 0.5, h = 1.2, col = "red") # 'original' crosshairs
while (T) {
  loc <- locator(1) # click location in plot, then ESC
  plot(df) # clear 'original' crosshairs
  abline(h = loc$y, v = loc$x, col = "green") # crosshairs at new position
}

如果你需要更多的能力,Shiny 是一个不错的选择(在我看来),而 d3 可能是矫枉过正,除非你已经非常熟练地使用 HTML、JavaScript 和 SVG。

于 2013-10-18T22:10:45.497 回答
1

TeachingDemos 包中有几个不同的函数,它们在图形窗口中使用鼠标进行交互式定位。TkIdentify 函数使用 Tk 窗口并显示实时拖动,dynIdentify 函数的工作方式类似但不需要 Tk(它使用getGraphicsEvent,所以你需要一个支持它的系统,我知道 Windows 支持)。和函数HWidentifyHTKidentify跟随鼠标。

sudoku 包中的playSudoku函数还读取图形中的当前鼠标指针位置,并从键盘读取按键(具有 Tk 窗口或使用两种选项getGrahpicsEvent)。

这些也可以适用于使用 RStudio 的操作包(我有计划用于教学演示)。我对闪亮的了解还不够,不知道在闪亮的情况下做到这一点是多么容易。

我建议查看上述功能,看看功能是否与您想要的功能相似,如果是,请查看代码并了解如何使其适应需求。

于 2013-10-18T22:06:58.490 回答