如何在ggplot中的散点图上绘制函数

How to draw a function on a scatter plot in ggplot

我想绘制一个函数——例如一条线——在散点图中。我已经编写了分别执行这两项操作的代码,但是如何将它们组合起来呢?我的实验返回了错误消息。

我的代码如下:

library(ROSE)
data(hacide)
train <- hacide.train

散点图

ggplot(train, aes(x1, x2, colour = cls)) +
  geom_point(size = 3, alpha = 0.4)

db <- function(x, beta1, beta2, alpha){-alpha/beta2 - x * beta1/beta2}

ggplot(data.frame(x = c(-4, 4)), aes(x = x))  +
  stat_function(fun = db, args = list(-1.642354, -1.596056, -6.004609), colour = "blue" , size = 2)

但是如何将线与散点图叠加/组合呢?

这是你要找的吗?

ggplot(data.frame(x = c(-4, 4)), aes(x = x))  +
  stat_function(fun = db, args = list(-1.642354, -1.596056, -6.004609), colour = "blue" , size = 2)+
  geom_point(data = train, aes(x1, x2, colour = cls),  size = 3, alpha = 0.4)

最简单的方法就是将函数添加到原始图中。 ggplot2 中的图表是分层构建的,这意味着您可以在构建图表时随时添加更多层。

对于您的代码,您可以这样做:

library(ROSE)
data(hacide)
train <- hacide.train

db <- function(x, beta1, beta2, alpha){-alpha/beta2 - x * beta1/beta2}

ggplot(train, aes(x1, x2, colour = cls)) +
  geom_point(size = 3, alpha = 0.4) +
  stat_function(fun = db, args = list(-1.642354, -1.596056, -6.004609),
  colour = "blue" , size = 2)

或将其添加到现有地块:

library(ROSE)
data(hacide)
train <- hacide.train

plot = ggplot(train, aes(x1, x2, colour = cls)) +
       geom_point(size = 3, alpha = 0.4)

db <- function(x, beta1, beta2, alpha){-alpha/beta2 - x * beta1/beta2}

plot + stat_function(fun = db, args = list(-1.642354, -1.596056, -6.004609),
colour = "blue" , size = 2)