我在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的图表,但欢迎使用填充扩展到图表顶部的任何其他解决方案。
编辑:修复代码。
答案 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))