0

我想填充或着色正态分布的一部分。我在这里犯了一个如何做到这一点的例子:

http://msenux.redwoods.edu/math/R/StandardNormal.php

x=seq(-4,4,length=200)
y=dnorm(x)
plot(x,y,type="l", lwd=2, col="blue")
x=seq(-1,1,length=100)
y=dnorm(x)
polygon(c(-1,x,1),c(0,y,0),col="gray")

但是,如果我尝试将上述代码概括为 x 轴的任何部分,我能想到的最好的方法是:

sigma <- 1
mu    <- 0

lower.x <- -0.0
upper.x <-  2.1

x  <- seq(-4, 4, length = 200)
y  <- ( 1/(sigma * sqrt(2*pi)) ) * ( exp(1)^( (-1 * ((x - mu)^2)) / (2*(sigma^2)) ) )
plot(x,y,type="l", lwd=2, col="blue")

x=seq(lower.x, upper.x, length=100)
y  <- ( 1/(sigma * sqrt(2*pi)) ) * ( exp(1)^( (-1 * ((x - mu)^2)) / (2*(sigma^2)) ) )
polygon(c(lower.x,x,1), c(0,y,0), col="gray")

我认为错误涉及第二个长度语句,但我不知道如何纠正错误。另外,我希望正态分布曲线的蓝线不被阴影区域的边界覆盖。虽然这不太重要。谢谢你的任何建议。

4

2 回答 2

3

或多或少来自:http ://www.fernandohrosa.com.br/en/P/shaded_areas_in_r/

lower.x <- 0
upper.x <- 2.1
step <- (upper.x - lower.x) / 100
sigma <- 1
mu <- 0
bounds <- c(mu-3*sigma, mu+3*sigma)
cord.x <- c(lower.x,seq(lower.x,upper.x,step),upper.x)
cord.y <- c(0,dnorm(seq(lower.x,upper.x,step),mu,sigma),0)
curve(dnorm(x,mu,sigma),xlim=bounds) 
polygon(cord.x,cord.y,col='skyblue')

另请参阅http://www.r-bloggers.com/functions-for-plotting-and-getting-greek-in-labels/ 以供将来参考: How to shade a region under a curve using ggplot2

于 2013-05-12T09:42:30.827 回答
1

下面的代码似乎做了我想要的,或者几乎是这样。

我使用by下面的语句而不是length语句。我不确定,但我怀疑第二个x值序列必须是第一个x值序列的子集。

然后我重新绘制正态分布曲线以覆盖多边形的顶部灰色边框。我可能想要改进的结果的唯一方面是蓝色在它覆盖灰色的地方有点暗。但这在这一点上似乎微不足道。

sigma <- 1
mu    <- 0

lower.x <- -0.0
upper.x <-  2.1

x  <- seq(-4, 4, by = 0.1)
y  <- ( 1/(sigma * sqrt(2*pi)) ) * ( exp(1)^( (-1 * ((x - mu)^2)) / (2*(sigma^2)) ) )
plot(x,y,type="l", lwd=2, col="blue")

x=seq(lower.x, upper.x, by = 0.1)
y  <- ( 1/(sigma * sqrt(2*pi)) ) * ( exp(1)^( (-1 * ((x - mu)^2)) / (2*(sigma^2)) ) )
polygon(c(lower.x,x,upper.x), c(0,y,0), col="gray")
lines(x, y, col="blue", lwd=2)
于 2013-05-12T06:31:58.813 回答