Write using mouse on R plot?

*爱你&永不变心* 提交于 2019-12-05 12:48:21

Take a look at RStudio and this example:

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)
)

This will put a new line on the plot, and allow you to tweak its slope and intercept.

This was inspired by the example on this page: http://support.rstudio.org/help/discussions/questions/106-rstudio-manipulate-command

Note that this requires installing RStudio (it ships with the manipulate package, I believe). For more info, see the site.

Others' solutions with locator can be done in base R.

Use locator(), a function that allows you to get the coordinates of the mouse pointer when clicking on a plot. Then use

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 

Of course the correct way of fitting lines through data is to use a proper model. Here is how you can do it with lm:

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

I made the following graph with this code:

  • The thick red line is the line connecting my two mouse clicks
  • The black line is the abline through these points
  • The blue line is the line of best fit produced by lm

Warning 1: locator only works on some graphics devices. See ?locator for more details.

Warning 2: Drawing lines of fit by hand could well be a really stupid idea. Use a regression function like lm or a smoothing function like loess instead.

If you were hoping to add horizontal or vertical lines to your plot interactively, you may want to use the locator() function to capture the position of a mouse click on the plot.

For example, the following code would allow the repeated addition of vertical lines to an existing plot:

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

You could adapt this for horizontal lines with abline(h=click.loc$y)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!