Интерактивный R граф - PullRequest
       15

Интерактивный R граф

3 голосов
/ 23 октября 2011

У меня есть график 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 точек данных.Если пользователь щелкает мышью после значения x, равного 2, я хочу открыть еще один график, который отображает точки данных, которые вы видите в списке (3 точки данных).Затем, если они закрывают этот график и щелкают «2 СНОВА» на исходном графике с 5 точками данных, я хочу, чтобы он открыл новый график с 3 точками данных, которые вы видите во втором операторе if.

Но это дает мне ошибки и проблемы с вводом / выводом.

Ответы [ 2 ]

3 голосов
/ 23 октября 2011

(Я понимаю, что это не полный ответ, но он не очень хорошо отформатировал бы комментарий.) Чтобы сделать конкретное устройство активным, вам нужно определить его номер. После выполнения вашего кода я могу получить свой список устройств и установить для первого устройства 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 не выводит активное устройство на передний план.

0 голосов
/ 01 декабря 2011

Это прекрасно работает в RStudio, если вы выполняете вызов locator() для встроенной панели графиков. Я думаю, что он вызывает locator против X11, что вызывает проблемы в 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.)

...