我试图用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
答案 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)