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