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

У меня есть график 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.

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


person CodeGuy    schedule 23.10.2011    source источник
comment
Отлично работает в сеансе Mac-GUI с R 2.13.1 и Mac X11.   -  person IRTFM    schedule 23.10.2011
comment
что вы имеете в виду сеанс Mac-GUI?   -  person CodeGuy    schedule 23.10.2011
comment
2-й щелчок не работает. только первый делает для меня. второй щелчок ничего не делает, даже если я закрываю первый график с тремя точками данных, который появляется до того, как я выполняю второй щелчок на исходном графике   -  person CodeGuy    schedule 23.10.2011
comment
как я могу сделать x11, чтобы исходный сюжет был активным сюжетом?   -  person CodeGuy    schedule 23.10.2011
comment
вы можете открывать и закрывать и устанавливать графические окна по умолчанию с помощью функций dev.set, dev.close и т.д.   -  person Spacedman    schedule 23.10.2011
comment
@CodeGuy: Саймон Урбанек предоставляет графический интерфейс для Mac. r.research.att.com/#GUI   -  person IRTFM    schedule 23.10.2011
comment
Другой путь: взгляните на iplots и такие функции, как iplot, iset.selected() и другие, но вы можете обнаружить, что одного iplot будет достаточно.   -  person Iterator    schedule 26.10.2011


Ответы (2)


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

person IRTFM    schedule 23.10.2011
comment
Даже лучше (не стесняйтесь включить это в свой ответ, если хотите). Используйте dev.ID <- as.numeric(dev.cur()) сразу после создания устройства, чтобы получить его идентификатор. Вы можете использовать dev.set(dev.ID) для смены устройства в любое время. - person nico; 23.10.2011
comment
Я думаю, что реальный ответ должен исходить от кого-то, у кого есть R внутри RStudio, поскольку взаимодействие с устройством кажется нарушенным или запутанным каким-то образом, который не воспроизводится на моей машине. Но если CodeGuy обнаружит, что наши комментарии указывают ему путь к успеху, я постараюсь исправить свой ответ. - person IRTFM; 23.10.2011
comment
в RStudio dev.cur() всегда будет возвращать одно и то же значение, независимо от того, на каком графике вы находитесь, если вы используете устройство RStudio. Однако, если вы используете X11() для создания нового графика, то функции dev.cur, dev.set и т. д. работают нормально. - person nico; 23.10.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.)

person Joe Cheng    schedule 01.12.2011