我正在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的图,但是欢迎使用其他任何将填充范围扩展到图顶部的解决方案。

编辑:修复了代码。

最佳答案

我想这就是你的意思。请注意使用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))

10-08 10:51