完全覆盖两条曲线之间的圆柱形区域

时间:2017-02-21 04:42:00

标签: r plot

我想知道如何用一些颜色完全覆盖两条曲线之间的圆柱形区域?现在,我已尝试使用rect(),但rect()上方和下方仍有两个微小的空格,我不知道如何覆盖?

此处是我当前的R代码:

curve(dnorm(x), -1.96, 1.96, bty="n", ann=F, axes=F, xaxs="i", yaxs="i")
curve(-dnorm(x), -1.96, 1.96, add=TRUE)

rect(-.5, -dnorm(-.5), .5, dnorm(.5), col="red" )  # How can I fill-up the white space 
                                                   # above and below the rectangle?
axis(1, at=c(-1.96,0,1.96),mgp=c(2, .6, .45), tcl=F )

此外,这是一张显示顶部空白区域和底部空白区域的图片:

enter image description here

2 个答案:

答案 0 :(得分:2)

通过将line=0添加到axis(),可以修复底部的行。 (我发现?axis处的文档暗示默认line=NA会将该行放在边距副“线条数量中”。

也许我误解了你,但你无法用矩形填充顶部的空白区域。要遵循曲线顶部的曲率,您需要polygon

curve(dnorm(x), -1.96, 1.96, bty="n", ann=F, axes=F, xaxs="i", yaxs="i")
curve(-dnorm(x), -1.96, 1.96, add=TRUE)
n <- 50
xs <- seq(-0.5, 0.5, len=n)
polygon(c(xs[1], xs, xs[n]), c(0, dnorm(xs), 0), col='red')
axis(1, at=c(-1.96,0,1.96),mgp=c(2, .6, .45), tcl=F , line = 0)

normal curve

答案 1 :(得分:0)

使用ggplot

library(ggplot2)
ggplot(data.frame(x=seq(-1.96,1.96,0.01)), aes(x)) + 
  stat_function(fun=dnorm, xlim=c(-1.96, 1.96))+
  stat_function(fun=function(x)-dnorm(x), xlim=c(-1.96, 1.96))+
  geom_rect(aes(xmin=-.5, xmax=.5,ymin=-dnorm(.5), ymax=dnorm(.5)), fill='red', col='black', alpha=0.5) +
  geom_hline(yintercept=0) +
  geom_text(data=data.frame(x=c(0.00,-1.96,1.96), y=rep(0,3)), aes(x=x, y=y, label = x), nudge_y = 0.015) +
  theme_bw()

enter image description here