我想用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中看起来像下图。
我正在使用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")
最后用
减少x步长x = seq(-4, 4, 0.01)
以某种方式告诉我我想要的东西。
我的问题:
答案 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")
另外,一个小提示:如果你绘制区域1,然后是线条它可能看起来更好,因为线条没有部分遮挡
ggplot(myDF, aes(x,y)) +
geom_area(aes(x=xfill),fill="red") +
geom_line(size=1)
答案 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()