ggplot2:即使使用fullrange = TRUE,geom_smooth置信区也不会扩展到图的边缘

时间:2016-02-11 15:59:11

标签: r ggplot2

我一直致力于在ggplot2中生成一些散点图,发现我的geom_smooth se shade(与stat_smooth完全相同)不会扩展我的情节的整个范围(见情节图),这让我发疯

你可以从代码中看到我使用了“fullrange = TRUE”并且它确实扩展了线本身(以及我的另一条拟合线上的se阴影),但无论出于何种原因,在我的一条拟合线上阻挡了阴影

这似乎是一个问题,它与情节的上边界相冲突。如果我将范围扩展到线条触及右边界的点,则阴影继续没有问题,但这样做不是一个选项,因为我必须加倍x和y轴范围才能实现这一点,这会压扁我的数据

有没有人知道如何让阴影一直延伸到上轴边界?

code to produce plot

enter image description here

1 个答案:

答案 0 :(得分:13)

除了coord_cartesian之外,您可能还需要添加scale_x/y_continuousscale_x/y_continuous删除超出图表范围的点,但coord_cartesian会覆盖此图并使用所有数据,即使其中某些数据在图表中不可见。在您的绘图中,红点的置信区间结束,其中波段的顶部超出图形的y范围。

图表的扩展范围内没有实际的“数据”,但是geom_smooth会将其生成的点视为将信任带绘制为“数据”,以便确定要绘制的内容。

看看下面的例子。第一个图仅使用scale_x/y_continuous。第二个添加coord_cartesian,但请注意,置信范围仍未绘制。在第三个图中,我们仍然使用coord_cartesian,但我们向下扩展scale_y_continuous范围,以便置信区域中零以下的点包含在y范围内。但是,coord_cartesian决定了实际绘制的范围,并且还可以防止范围之外的点被排除。

我实际上觉得这种行为令人困惑。我原以为你可以单独使用coord_cartesian和所需的x和y范围,并且仍然将信心带和回归线一直绘制到图的边缘。无论如何,希望这能让你得到你想要的东西。

p1 = ggplot(mtcars, aes(wt, mpg, colour=factor(am))) + 
  geom_smooth(fullrange=TRUE, method="lm") +
  scale_x_continuous(expand=c(0,0), limits=c(0,10)) +
  scale_y_continuous(expand=c(0,0), limits=c(0,100)) +
  ggtitle("scale_x/y_continuous")

p2 = ggplot(mtcars, aes(wt, mpg, colour=factor(am))) + 
  geom_smooth(fullrange=TRUE, method="lm") +
  scale_x_continuous(expand=c(0,0), limits=c(0,10)) +
  scale_y_continuous(expand=c(0,0), limits=c(0,100)) +
  coord_cartesian(xlim=c(0,10), ylim=c(0,100)) +
  ggtitle("Add coord_cartesian; same y-range")

p3 = ggplot(mtcars, aes(wt, mpg, colour=factor(am))) +
  geom_smooth(fullrange=TRUE, method="lm") +
  scale_x_continuous(expand=c(0,0), limits=c(0,10)) +
  scale_y_continuous(expand=c(0,0), limits=c(-50,100)) +
  coord_cartesian(xlim=c(0,10), ylim=c(0,100)) +
  ggtitle("Add coord_cartesian; expanded y-range")

gridExtra::grid.arrange(p1, p2, p3)

enter image description here