代码之家  ›  专栏  ›  技术社区  ›  rnorouzian

为什么R中的多边形适用于全曲线,而不适用于半曲线?

  •  1
  • rnorouzian  · 技术社区  · 9 年前

    polygon() 适用于双面曲线( 底图 ),但不能正确使用同一曲线的一半( )?

    我感谢你的简短解释。

    par(mfrow = c(2, 1))
    
    gg = curve(dnorm(x), -4, 0) # Not working!
    polygon(gg, col = 2)
    
    gg = curve(dnorm(x), -4, 4) # Working!
    polygon(gg, col = 2)
    

    enter image description here

    2 回复  |  直到 9 年前
        1
  •  3
  •   loki    9 年前

    一 curve

    polygon ?polygon 我们可以看到

    “假设多边形通过将最后一个点连接到第一个点来闭合。”

    第一点和最后一点由 from 和 to 曲线 -4 0 .

    只需添加 xlim xaxs = "i" 到 curve()

    gg = curve(dnorm(x), -4, 4, xlim = c(-4,0), xaxs = "i") # Working!
    polygon(gg, col = 2)
    

    enter image description here

    倍数 s在一个绘图中

    gg ).

    gg = curve(dnorm(x), -4, 4) ; 
    polygon(gg, col = 2) ; 
    gg = curve(dnorm(x), -4, 0, xlim = c(-4,0), xaxs = "i", add = T) ; 
    

    现在我们来看一下 gg公司

    gg 
    # $x
    # [1] -4.00 -3.96 -3.92 -3.88 -3.84 -3.80 -3.76 -3.72 -3.68 -3.64 -3.60 -3.56 -3.52 -3.48 -3.44 -3.40 -3.36 -3.32 -3.28
    # [20] -3.24 -3.20 -3.16 -3.12 -3.08 -3.04 -3.00 -2.96 -2.92 -2.88 -2.84 -2.80 -2.76 -2.72 -2.68 -2.64 -2.60 -2.56 -2.52
    #  .....
    # $y
    # [1] 0.0001338302 0.0001569256 0.0001837125 0.0002147280 0.0002505784 0.0002919469 0.0003396012 0.0003944025 0.0004573148
    # [10] 0.0005294147 0.0006119019 0.0007061107 0.0008135212 0.0009357722 0.0010746733 0.0012322192 0.0014106023 0.0016122275
    #  .....
    

    我们看到了 gg公司 只是一个列表 $x $y 协调。因此,我们可以在以下位置添加一个坐标: 0, 0 到第二个 gg公司 模拟重叠第二条曲线的终点。之后,正确绘制了两条曲线。

    gg$x <- c(gg$x, 0)
    gg$y <- c(gg$y, 0)
    polygon(gg, col = 4)
    

    enter image description here

        2
  •  1
  •   sconfluentus    9 年前

    Loki向您展示了如何根据需要填充曲线,但没有解释为什么半曲线会这样填充,如果您希望继续使用此函数,这一点很重要。

    polygon() 一条单独的曲线,它通过画一条直线来连接两端。然后填充曲线和新线之间的空间。

    整个分布上升和下降到y轴上的同一点,形成一条漂亮的填充曲线。通过在曲线顶部停止,通过方向变化绘制直线,在曲线和两侧的直线之间留下开放空间,从而 多边形()