Запись с помощью мыши на графике 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)