2016-09-17 61 views
1

我想用R绘制密度函数并填充以下的区域它。我的例子是:未正确使用geom_area绘制的区域(某些区域有偏移)

library(ggplot2) 
x = seq(-4, 4, 0.1) 
y = dnorm(x, mean=0, sd=1) 
myDF = data.frame(x,y,xfill=ifelse(x>-1,x,0)) 
p <- ggplot(myDF, aes(x,y)) 
p + geom_line(size=1) + geom_area(aes(x=xfill),fill="red") 

它看起来像在RStudio中的以下图像。

enter image description here

我使用RStudio版本0.99.902与平台ř版本3.3.1(2016年6月21日):x86_64的-W64-的mingw32/64(64位)下运行:视窗> = 8 x64(内部版本9200)与包ggplot2_2.1.0

虽然创建这个问题我被链接到另一个问题here。现在改变根据的答案有一个的geom_area调用

geom_area(aes(x=xfill),fill="red", pos="identity") 

那么我的情节看起来像 enter image description here

最后减少与

x = seq(-4, 4, 0.01) 

的X步长给我不知何故,我想要什么。

enter image description here

我的问题:

  1. 任何想法,为什么会存在这种问题在0附近的区域?
  2. 为什么'pos =“identity”'在这里帮助 - 仍然缺少一些区域?
  3. 我真的在这里解决了这个问题吗?
+0

我在这里发现了另一个问题(或者可能是相同的),我将xfill设置为0,因为我不想绘制x值。通过设置它们不与最小值匹配来解决这个问题,在这种情况下:'myDF = data。frame(x,y,xfill = ifelse(x> -1,x,-1))' – Martin

回答

3

你可以使用NA而不是0为弹力紧值你不想阴影

myDF = data.frame(x,y,xfill = ifelse(x > -1, x, NA)) 

p <- ggplot(myDF, aes(x,y)) 
p + geom_line(size=1) + geom_area(aes(x=xfill),fill="red") 

enter image description here

而且,一个小技巧:如果你绘制区域1,接着由线可能看起来更好,因为该行不部分模糊

ggplot(myDF, aes(x,y)) + 
    geom_area(aes(x=xfill),fill="red") + 
    geom_line(size=1) 

enter image description here

+0

不需要减少步长或使用'pos ='identity''。似乎0作为x坐标误导。非常感谢。 – Martin

0

我认为ggplot制作多个区域并堆叠它们,这就是为什么position = identity有助于它使区域重叠。

我会改变代码,使xfill一个二进制变量,指定哪些填充是需要的。减小步长以消除间隙。

x <- seq(-4, 4, 0.01) 
y <- dnorm(x, mean=0, sd=1) 
myDF <- data.frame(x,y,xfill=ifelse(x>-1,TRUE,FALSE)) 
ggplot(myDF, aes(x,y, fill = xfill)) + 
     geom_line(size=1) + 
     geom_area() 
+0

这会产生两个分开的彩色区域,但不完全是我想要的。我希望右侧是红色的,左侧是完全不着色的。 – Martin

+0

\你可以设置'alpha'为零以不显示不需要的颜色。 –