我一直在努力在ggplot2中生成一些散点图,发现我的geom_smooth se shade(与stat_smooth完全相同)不会扩展我的绘图的整个范围(见情节图),这让我发疯.
您可以从代码中看到我使用了"fullrange = TRUE"并且它确实扩展了线本身(以及我的另一条拟合线上的se阴影),但无论出于何种原因,在我的一条拟合线上阻挡了阴影.
这似乎是一个问题,它与情节的上边界相冲突.如果我将范围扩展到线条触及右边界的点,则阴影继续没有问题,但这样做不是一个选项,因为我必须加倍x和y轴范围才能实现这一点,这会压扁我的数据.
有没有人知道如何让阴影一直延伸到上轴边界?
eip*_*i10 14
你可能需要添加coord_cartesian
除scale_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)