绘图和阴影曲线会生成不需要的线条

时间:2013-12-15 18:19:15

标签: r ggplot2

我试图在R曲线下绘制正态分布和阴影,但我在曲线下方遇到了不必要的问题。

x <- seq(-3,3,0.0001)   
y <- dnorm(x,0,1)
ytop <- dnorm(-3,3,0.001)
df <-data.frame(x=x,y=y)
p <- ggplot(df, aes(x=x,y=y)) + geom_line() 

cover <- rbind(c(1,0), subset(df, x > 1), c(df[nrow(df), "X"], 0))

 p + geom_segment(aes(x=1,y=0, xend=2.5, yend=ytop)) +
     geom_polygon(data = cover, aes(x, y))

有人可以向我解释为什么我弄乱了这个数字并将阴影区域下方的线条弄清楚了吗?

enter image description here

2 个答案:

答案 0 :(得分:6)

我看到了两个错误:1)当列名为“x”时使用“X”并且未能在结尾处将多边形完成回(x = 1,y = 0)。

   cover <- do.call(rbind, list( data.frame(x=1,y=0), 
                                 subset(df, x > 1),  # the x,y points
                                  data.frame(x=df[nrow(df), "x"],y= 0), # drop to y=0
                                  data.frame(x=1,y=0)) )  # complete the bottom
  p + geom_segment(aes(x=1,y=0, xend=2.5, yend=ytop)) +
       geom_polygon(data = cover, aes(x, y))

在我的机器上,我还注意到图形引擎似乎在底部留下了一个像素的跳跃,我可以通过相当严格的临时调整来移除它:

 cover <- do.call(rbind, list( data.frame(x=1,y=0), 
                               subset(df, x > 1), 
                               data.frame(x=df[nrow(df), "x"],y= -0.001), 
                               data.frame(x=1,y=0)) )

(我想我只是在补偿别人的错误,但也许地球在SD&gt; 2处弯曲了?)

更多的实验表明,临时调整以及纠正“X”拼写将是足够的(geom_polygon足够聪明地关闭自己):

cover <- do.call(rbind, list( data.frame(x=1,y=0), 
                              subset(df, x > 1), 
                              data.frame(x=df[nrow(df), "x"],y= -0.001)) )

答案 1 :(得分:4)

这是一种更简单的方法。

x <- seq(-3,3,0.0001)   
y <- dnorm(x,0,1)
df <-data.frame(x=x,y=y)
ggplot(df, aes(x=x,y=y)) + 
  geom_line()+
  geom_ribbon(data=subset(df,x>1), aes(ymin=0, ymax=y))