Запись с помощью мыши на графике R?

Я создал диаграмму с помощью функции plot() в R.

Есть ли возможность рисовать на этом графике?

Я хотел бы добавить прямую линию и получить ее параметры, но, на мой взгляд, abline() может быть неудобным (я хотел бы нарисовать много строк и выбрать тот, который будет наиболее правильным).

Как я могу выполнить эту задачу?

Ответ 1

Взгляните на RStudio и этот пример:

library(manipulate)
data = matrix(rnorm(20), ncol = 2)

example <- function(data, a, b){
  plot(data[,1],data[,2])
  abline(a = a, b = b)
}

manipulate(
  example(data, a, b),
  a = slider(-5,5),
  b = slider(-5,5)
)

Это создаст новую строку на сюжете и позволит вам настроить его наклон и перехватить.

Это было вдохновлено примером на этой странице: http://support.rstudio.org/help/discussions/questions/106-rstudio-manipulate-command

Обратите внимание, что для этого требуется установка RStudio (я полагаю, он поставляется с пакетом manipulate). Для получения дополнительной информации см. Сайт.

Другие решения с locator могут быть выполнены в базе R.

Ответ 2

Используйте locator(), функцию, которая позволяет вам получить координаты указателя мыши при щелчке по сюжету. Затем используйте

plot(cars)
xy <- locator(n=2)
lines(xy, col="red", lwd=5)
lm(y~x, xy)
abline(coef(lm(y~x, xy)))
coef(lm(y~x, xy))
(Intercept)           x 
  33.142094    1.529687 

Конечно, правильный способ подбора строк через данные - использовать подходящую модель. Вот как вы можете сделать это с помощью lm:

abline(coef(lm(dist~speed, cars)), col="blue")

Я сделал следующий график с этим кодом:

  • Толстая красная линия - это линия, соединяющая мои два щелчка мыши.
  • Черная линия - это abline через эти точки
  • Синяя линия - это линия наилучшего соответствия, созданная lm

enter image description here

Предупреждение 1: locator работает только на некоторых графических устройствах. Подробнее см. ?locator.

Предупреждение 2: Линии рисования под рукой вручную могут быть действительно глупой идеей. Используйте функцию регрессии, например lm, или функцию сглаживания, например loess.

Ответ 3

Если вы надеялись добавить горизонтальные или вертикальные линии в ваш график в интерактивном режиме, вы можете использовать функцию locator() для захвата позиции щелчка мыши на графике.

Например, следующий код позволит повторное добавление вертикальных линий к существующему сюжету:

repeat {
  click.loc <- locator(1)
  if(!is.null(click.loc)) abline(v=click.loc$x)
  else break
}

Вы можете адаптировать это для горизонтальных линий с помощью abline(h=click.loc$y)