来自多个系数估计的图函数与R中的ggplot

时间:2017-06-01 19:16:25

标签: r function ggplot2

我试图用ggplot中相同数字的回归估计来绘制隐含函数。在下面的示例中,我创建了一个简单的线性函数,其中c和b是从早期回归中存储的系数估计值。我试图按组绘制范围[0,50]范围内的函数(最好也使用选项:color = groups)。

library(ggplot2)

groups = c("a", "b", "c")
c = c(5, 4, 3)
b = c(-0.01, -0.002, -0.001)
x = c(0, 0, 0)
df <- data.frame(cbind(c, b, x))

grad_fun <- function(x) {
  c + b*x
}

ggplot(data = df, aes(x = x, group = groups)) +
  stat_function(fun = grad_fun) + 
  xlim(0, 50)

我的形象是这样的,但我似乎无法找出原因。有关如何解决此问题的任何建议都是受欢迎的。 Image: Outcome of above code

1 个答案:

答案 0 :(得分:0)

有几件事:

  • geom_abline不是使用自定义功能,而是您的朋友。
  • 请注意group = group在这种情况下不执行任何操作 - 您需要指定组的显示方式,因此它应为color = group
  • 最后,在没有必要的地方使用cbind时要小心 - 它会将您的数字参数转换为无法绘制的因子。

下面的代码应该做你想要的:

library(ggplot2)

groups = c("a", "b", "c")
c = c(5, 4, 3)
b = c(-0.01, -0.002, -0.001)
df <- data.frame(c, b, groups)

ggplot(data = df) +
  geom_abline(aes(slope = b, intercept = c, color = groups)) +
  xlim(0,50) + ylim(0,5)

geom_abline仅适用于y = m * x + b形式的仿射函数。相反,如果您想使用任何函数,则需要使用stat_function并将它们添加到如下所示的循环中。您还可以为数据添加颜色

library(ggplot2)

groups = c("a", "b", "c")
a = c(-1, 3, 2)
c = c(5, 4, 3)
b = c(-0.01, -0.002, -0.001)
colors = RColorBrewer::brewer.pal(length(a), "Dark2")
df <- data.frame(a, b, c, groups, x = 0, colors)

fun <- function(x, a, b, c){
  function(x) a*x^2 + b*x + c 
}

funs <- mapply(fun, a = df$a, b = df$b, c = df$c)

p <- ggplot(data = df, aes(x=x)) +
  xlim(-50,50) 

for (i in seq_len(nrow(df))){
  p <- p +
    stat_function(fun = funs[[i]], color = colors[i])
}

print(p)