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

J R*_*oss 4 r ggplot2

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

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

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

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

代码来制作情节

在此输入图像描述

eip*_*i10 14

你可能需要添加coord_cartesianscale_x/y_continuous.scale_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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • OP 可能正在寻找 [此代码图像](http://i.imgur.com/JGvPqiv.png) 而不是您的复制/可粘贴文本版本;) (2认同)