区域未使用geom_area正确绘制(某些区域有偏移)

时间:2016-09-17 09:38:59

标签: r ggplot2

我想用R绘制密度函数并填充下面的区域。我的例子是:

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和R版本3.3.1(2016-06-21)在平台上运行:x86_64-w64-mingw32 / x64(64位)运行于:Windows&gt; = 8 x64(build 9200)包ggplot2_2.1.0

在创建此问题时我与另一个问题here相关联。现在根据其中一个答案更改geom_area调用

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

然后我的情节看起来像 enter image description here

最后用

减少x步长
x = seq(-4, 4, 0.01)

以某种方式告诉我我想要的东西。

enter image description here

我的问题:

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

2 个答案:

答案 0 :(得分:3)

对于不想要着色的xfill值,您可以使用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

答案 1 :(得分: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()