R - 在ggplot2中填充区域到图的顶部

时间:2011-11-21 20:20:41

标签: r ggplot2

我在ggplot2中创建了一个填充密度的图,其中一些我想要截断。我为缺乏图像道歉 - 显然我还不允许发布它们。开始代码的一个简单示例:

dd = with(density(rnorm(100,0,1)),data.frame(x,y))

ylimit = .3

ggplot(data = dd, mapping = aes(x = x, y = y), geom="line") +
 layer(data = dd, mapping = aes(x = x, y = y), geom = "area", 
       geom_params=list(fill="red",alpha=.3)) +
         scale_x_continuous(limits = c(-3,3)) +
         scale_y_continuous(limits = c(0,ylimit)) 

然而,这导致填充密度中间的空白区域,其中dd $ y> ylimit。

如果我用

补偿这个
dd$y = pmin(dd$y, ylimit)

区域以阴影显示,但图表显示的区域略高于ylimit,因此填充不会延伸到图形的顶部。

理想情况下,我想知道如何让ggplot显示精确到ylimit的图表,但欢迎使用填充扩展到图表顶部的任何其他解决方案。

编辑:修复代码。

1 个答案:

答案 0 :(得分:4)

我认为这就是你的意思。请注意使用ifelse来获取截断行为。

dd = with(density(rnorm(100,0,1)), data.frame(x, y))

ylimit = .3

dev.new(width=4, height=4)
ggplot(data = dd, mapping = aes(x = x, y = y), geom="line") +
 layer(data = dd, mapping = aes(x = x, y = ifelse(y>ylimit, ylimit, y)), geom = "area", 
       geom_params=list(fill="red",alpha=.3)) +
         scale_x_continuous(limits = c(-3,3)) +
         coord_cartesian(ylim=c(0, ylimit))

enter image description here