ggplot的带状图在y轴限制处被截断

26

我想使用ggplot2中的geom_ribbon来绘制阴影置信区间。但如果其中一条线超出了设定的y轴限制,那么带状图会被截断,而不会延伸到绘图边缘。

最简示例

x <- 0:100
y1 <- 10+x
y2 <- 50-x

ggplot() + theme_bw() +
  scale_x_continuous(name = "x", limits = c(0,100)) +
  scale_y_continuous(name = "y", limits = c(-20,100)) +
  geom_ribbon(aes(x=x, ymin=y2-20, ymax=y2+20), alpha=0.2, fill="#009292") +      
  geom_line(aes(x=x , y=y1)) +
  geom_line(aes(x=x , y=y2)) 

在此输入图像描述

我的目标是复现基本R绘图中的相同行为,其中阴影延伸到边缘

plot(x, y1, type="l", xlim=c(0,100),ylim=c(-20,100))
lines(x,y2)
polygon(c(x,rev(x)), c(y2-20,rev(y2+20)), col="#00929233", border=NA)

输入图像描述


1
scale_y_continuous() 调用中使用 oob=scales::squish 是有帮助的,但会产生一些自己的伪影... - Ben Bolker
1个回答

36
问题在于limits会删除超出其范围的所有数据。你需要的是先绘制图形,然后再放大。这可以通过使用coord_cartesian来实现。
ggplot() + theme_bw() +
  geom_ribbon(aes(x = x, ymin = y2 - 20, ymax = y2 + 20), alpha = 0.2, fill = "#009292") +      
  geom_line(aes(x = x, y = y1)) +
  geom_line(aes(x = x, y = y2)) + 
  coord_cartesian(ylim = c(-25, 100), xlim = c(0,100)) 

输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接