3

我有一个 R 图,我希望用户能够点击图表上的某个点,我想知道他们点击了哪里。有点像鼠标监听器。我正在使用 RStudio。这有可能吗?基本上,对于他们点击的某个点,我想显示另一个图,其中包含有关该点的更多详细信息。

这是我所拥有的:

data <- data.frame(x=c(1,2,3,4,5),y=c(1,2,3,4,5))
x11()
plot(data)

loc <- locator(n=1)
if(loc$x > 2) {
  x11()
  plot(c(1,2,3),c(5,6,7))
}

loc <- locator(n=1)
if(loc$x > 2) {
  x11()
  plot(c(4,5,6),c(5,6,7))
}

因此,出现了第一个具有 5 个数据点的图。如果用户点击超过 2 的 x 值,那么我想打开另一个图,它绘制您看到列出的数据点(3 个数据点)。然后,如果他们关闭该图并在原始的 5 个数据点图上再次单击 2,那么我希望它打开一个新图,其中包含您在第二个 if 语句中看到的 3 个数据点。

但它给了我错误和 I/O 问题。

4

2 回答 2

3

(我意识到这不是一个完整的答案,但它不会像评论那样很好地格式化。)要使特定设备成为活动设备,您需要确定其编号。执行您的代码后,我可以获取设备列表并将第一个 X11 设备设置为当前设备

dev.list()
#quartz    X11 quartz    X11    X11 
#     2      3      4      5      6 
dev.set(3)
#X11 
#  3 

所以试试这个:

x11() ; first.ID <- dev.cur()
plot(data)

loc <- locator(n=1)
if(loc$x > 2) {
  x11() ; second.ID <- dev.cur()
  plot(c(1,2,3),c(5,6,7))
}
dev.set(first.ID)
loc <- locator(n=1)
if(loc$x > 2) {
  x11() ; third.ID <- dev.cur()
  plot(c(4,5,6),c(5,6,7))
}

在我的机器上,您还需要单击第一个图形窗口的标题以显示它,因为 Mac Gui 不会将活动设备置于前台。

于 2011-10-23T13:57:03.863 回答
0

如果您locator()对内置的绘图窗格执行调用,这在 RStudio 中可以正常工作。我认为它调用locatorX11 会导致 RStudio 出现问题。绘制 X11 详细信息后,调用dev.set(0)以使 RStudio 绘图窗格再次处于活动状态。

data <- data.frame(x=c(1,2,3,4,5),y=c(1,2,3,4,5))
plot(data)

loc <- locator(n=1)
if(loc$x > 2) {
        x11()
        plot(c(1,2,3),c(5,6,7))
}

dev.set(0)

loc <- locator(n=1)
if(loc$x > 2) {
        x11()
        plot(c(4,5,6),c(5,6,7))
}

(老实说,我不确定为什么dev.set(0)有效,必须与编写 RStudio 图形设备的开发人员核实。)

于 2011-12-01T01:22:18.740 回答