2013-12-15 97 views
1

我想绘制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)) 

为什么我搞乱了这个数字,得到线的阴影区下面有人能解释一下吗?在1)中的“X”时,列名是“x”和未完成多边形回(X = 1,Y = 0):

enter image description here

+0

看起来你没有去为y = 0的多边形规定的极限。 –

+0

虽然'tail(cover)'显示'y'的最后一个值是'0' – user1322296

回答

6

你犯了两个错误,我看到的结束。

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)) 

在我的机器我也注意到,图形引擎似乎离开沿着底部的一个像素跳跃,我可以有一个相当hackish的临时调整删除:

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> 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))) 
+0

感谢您向我展示了我错误的地方,回到了'x = 1'和'y = 0'!和超级加上清理额外的像素,我看到你的初步答案后才注意到! – user1322296

+0

。@ Dwin如果我可能会问你的建议,我现在试图改变多边形的颜色作为'x'的一个函数,例如'covert $ col < - 1:nrow(cover)',但'fill'只会为每个多边形设置一种颜色。我想知道你是否知道这是可能的,也许值得一提的问题,如果我不知道? – user1322296

+0

嗯看起来像我需要制作跨x的许多多边形以获得填充渐变,也许ggplot不是方式,并有另一种方法来获得曲线下的填充渐变。 – user1322296

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))