Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R ggplot2:如何绘制隐式函数(仅在一个级别绘制等高线)?_R_Ggplot2_Contour_Curve - Fatal编程技术网

R ggplot2:如何绘制隐式函数(仅在一个级别绘制等高线)?

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 这是

使用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
这是一个两个变量等于零的函数,例如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")