2017-02-21 5 views
0

Мне интересно, как полностью покрыть цилиндрическую область между двумя кривыми, используя какой-то цвет? Прямо сейчас, я пробовал использовать 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

+0

В каких пространствах вы говорите? Можете ли вы добавить изображение, чтобы сделать его более понятным? – MrFlick

+1

Эй, ваш код не производит этого вообще. Есть ли что-то, что вы нам не говорите? (Мой ответ по-прежнему применяется в концепции, хотя вам необходимо настроить его для вашего зеркалирования.) – r2evans

+0

Вы посмотрели другие ответы о заполнении областей под кривыми? http://stackoverflow.com/questions/3494593/shading-a-kernel-density-plot-between-two-points – MrFlick

ответ

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

+0

Я думал, что вызов одной функции будет самоочевидным, но я использую * ваш код * для начните этот сюжет. Взгляните на ['? Polygon'] (https://stat.ethz.ch/R-manual/R-devel/library/graphics/html/polygon.html) для дальнейшего объяснения. – r2evans

+0

Нет, вы можете сделать это. Просто подумайте о «полигоне» как о вызове 'lines', который обертывается вокруг начальной точки и, возможно, окрашивает внутреннее пространство. На SO есть много примеров (а также примеры в «полигоне», которые явно исчерпывают варианты). – r2evans

+0

StackOverflow, возможно, вы слышали об этом ;-) – r2evans

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

Смежные вопросы