您可能需要另外添加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)
請把你的代碼中的問題本身,而不是附加代碼的圖像。一旦你把代碼放在問題中,一定要使用Ctrl + K來正確格式化它。 –