R ggplot2:如何绘制隐式函数(仅在一个级别绘制等高线)?
使用R,我想绘制一些数据点和它们上面的曲线(这是用神经网络训练的决策边界)。首先,我使用普通的绘图函数,但现在我希望使用R ggplot2:如何绘制隐式函数(仅在一个级别绘制等高线)?,r,ggplot2,contour,curve,R,Ggplot2,Contour,Curve,使用R,我想绘制一些数据点和它们上面的曲线(这是用神经网络训练的决策边界)。首先,我使用普通的绘图函数,但现在我希望使用ggplot2使它看起来更漂亮 这是没有ggplot的情况下的情况(特别注意曲线,各点不太相关): 使用ggplot绘制点没有问题,但现在我还想添加曲线,该曲线由以下函数描述: 1.91*(1/(1+exp(-(23.50+12.64*x-24.54*y))))-1.95*(1/(1+exp(-(73.51-12.36*x-10.01*y)))) + 0.98 = 0 这是
ggplot2
使它看起来更漂亮
这是没有ggplot的情况下的情况(特别注意曲线,各点不太相关):
使用ggplot
绘制点没有问题,但现在我还想添加曲线,该曲线由以下函数描述:
1.91*(1/(1+exp(-(23.50+12.64*x-24.54*y))))-1.95*(1/(1+exp(-(73.51-12.36*x-10.01*y)))) + 0.98 = 0
这是一个两个变量等于零的函数,例如3x-2y=0。正如你所看到的,这个很难用y=。。。这就是为什么我想用等高线图在level=0处绘制方程。
它在我的散点图上使用curve3d工作:
curve3d(1.91*(1/(1+exp(-(23.50+12.64*x-24.54*y))))-1.95*(1/(1+exp(-(73.51-12.36*x-10.01*y)))) + 0.98 = 0, sys3d="contour",levels=0, add=TRUE)
现在我真的想使用ggplot2
来实现相同的结果。我已经尝试了stat\u contour
绘图,但是它们似乎没有函数,并且不允许只选择一个级别。因此:
ggplot
以方程形式(如ax+by=0,但可能更复杂)绘制函数ggplot
# data
x1 <- rnorm(200, 3, .28)
y1 <- rnorm(200, 3, .28)
x2 <- rnorm(100, 3.45, .15)
y2 <- rnorm(100, 3.35, .15)
x3 <- rnorm(100, 3.3, .15)
y3 <- rnorm(100, 2.4, .15)
groups <- c(rep("H",200), rep("A",100), rep("B",100))
data <- data.frame(x = c(x1,x2,x3), y = c(y1,y2,y3), group = groups)
# the working ggplot
windows()
ggplot(data, aes(x=x,y=y)) + xlim(2,4) + ylim(2,4) + geom_point(aes(color = group)) + scale_shape_manual(values=c(1,16))
# the old plot that I would like to plot with ggplot over the previous one with as well (doesn't work)
curve3d(1.91*(1/(1+exp(-(23.50+12.64*x-24.54*y))))-1.95*(1/(1+exp(-(73.51-12.36*x-10.01*y)))) + 0.98, xlim=c(2,4), ylim=c(2,4), sys3d="contour",levels=0, add=TRUE)
#数据
x1tl;dr您唯一真正缺少的是breaks=0
。
底图:
g0 <- ggplot(data, aes(x=x,y=y)) + xlim(2,4) + ylim(2,4) +
geom_point(aes(color = group)) + scale_shape_manual(values=c(1,16))
如果您提供了一个带有示例输入值的示例,则更容易为您提供帮助。定义所有变量,以便我们可以尝试重新创建绘图来测试可能的解决方案。我理解,我只是添加了一个代码示例。
cc <- emdbook::curve3d(1.91*(1/(1+exp(-(23.50+12.64*x-24.54*y))))-
1.95*(1/(1+exp(-(73.51-12.36*x-10.01*y)))) + 0.98,
xlim=c(2,4), ylim=c(2,4), sys3d="none")
dimnames(cc$z) <- list(cc$x,cc$y)
mm <- reshape2::melt(cc$z)
g0 + geom_contour(data=mm,
aes(x=Var1,y=Var2,z=value),breaks=0,
colour="black")