Написать с помощью мыши на графике R? - PullRequest
4 голосов
/ 02 сентября 2011

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 02 сентября 2011

Посмотрите на 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.

6 голосов
/ 02 сентября 2011

Используйте 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 голосов
/ 02 сентября 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...