我想填充或着色正常分布的一部分。我想在这里做一个例子:
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")
我认为错误涉及第二个长度声明,但我无法弄清楚如何纠正错误。另外,我希望正态分布曲线的蓝线不被阴影区域的边界覆盖。虽然这不太令人担忧。谢谢你的任何建议。
答案 0 :(得分: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)
答案 1 :(得分:1)
或多或少来自: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