5

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

有没有可能在这张图上画?

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

我怎样才能完成这项任务?

4

3 回答 3

8

看看 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 中完成。

于 2011-09-02T13:38:47.577 回答
7

使用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

在此处输入图像描述

警告 1: locator仅适用于某些图形设备。有关?locator更多详细信息,请参阅。

警告 2: 手工绘制拟合线很可能是一个非常愚蠢的想法。请改用回归函数lm或平滑函数loess

于 2011-09-02T13:39:29.620 回答
4

如果您希望以交互方式向绘图添加水平线或垂直线,您可能希望使用该locator()功能来捕获鼠标在绘图上单击的位置。

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

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

您可以将其调整为水平线abline(h=click.loc$y)

于 2011-09-02T13:39:23.300 回答