在R图上用鼠标写?

时间:2011-09-02 13:21:40

标签: r scatter

我使用R中的plot()函数创建了散点图。

是否有可能在此图表上绘制?

我想添加一条直线并获取它的参数,但在我看来abline()可能不方便(我想绘制很多行并选择一个最合适的行。)

我该如何完成这项任务?

3 个答案:

答案 0 :(得分:7)

看看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包)。有关详细信息,请see the site

其他locator的解决方案可以在基础R中完成。

答案 1 :(得分:6)

使用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这样的平滑函数。

答案 2 :(得分:3)

如果您希望以交互方式向地块添加水平或垂直线条,您可能需要使用locator()功能捕捉图表上鼠标点击的位置。

例如,以下代码允许重复添加垂直线到现有图:

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

您可以使用abline(h=click.loc$y)

对水平线进行调整