为什么 R 中的多边形适用于全曲线而不适用于半曲线?
Why polygon in R works with a full curve but not with a half curve?
我想知道为什么 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)
一个curve
由于 polygon
连接了曲线的起点和终点,因此它创建了一些奇怪的形状。从?polygon
我们可以看出
"It is assumed that the polygon is to be closed by joining the last point to the first point."
第一个和最后一个点由 curve
中的 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)
一个图中有多个 curve
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)
Loki 向您展示了如何根据需要填充曲线,但没有解释为什么半条曲线会这样填充,如果您希望继续使用此功能,这一点很重要。
因为您给 polygon()
一条曲线,所以它通过画一条直线连接它们来闭合两端。然后它填充曲线和新线之间的空间。
完整分布上升和下降到 y 轴上的同一点,形成一条漂亮的填充曲线。通过停在曲线的顶部,通过方向的变化绘制线,在曲线和两侧的线之间留下空隙,polygon()
填充它们。
我想知道为什么 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)
一个curve
由于 polygon
连接了曲线的起点和终点,因此它创建了一些奇怪的形状。从?polygon
我们可以看出
"It is assumed that the polygon is to be closed by joining the last point to the first point."
第一个和最后一个点由 curve
中的 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)
一个图中有多个 curve
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)
Loki 向您展示了如何根据需要填充曲线,但没有解释为什么半条曲线会这样填充,如果您希望继续使用此功能,这一点很重要。
因为您给 polygon()
一条曲线,所以它通过画一条直线连接它们来闭合两端。然后它填充曲线和新线之间的空间。
完整分布上升和下降到 y 轴上的同一点,形成一条漂亮的填充曲线。通过停在曲线的顶部,通过方向的变化绘制线,在曲线和两侧的线之间留下空隙,polygon()
填充它们。