我正在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))