2016-02-11 51 views
2

我一直工作在生成GGPLOT2幾個散點圖,發現我的geom_smooth SE色光(與stat_smooth完全相同的問題)不會擴大我的情節的全部範圍(見情節圖),這是讓我瘋狂的。GGPLOT2:geom_smooth置信帶沒有延伸到圖形的邊緣,甚至與全頻= TRUE

你可以從代碼中看到我已經使用了「fullrange = TRUE」,它確實延長了線條本身(以及我的其他合身線上的陰影),但是無論出於何種原因,線。

這似乎是它的情節的上邊界衝突的問題。如果我將範圍擴展到線條碰到右邊界的點,陰影仍然沒有問題,但這樣做不是一個選項,因爲我必須加倍x和y軸範圍才能實現這一點,這會使我的數據。

沒有人有任何想法如何獲得樹蔭下一路延伸到上軸邊界?

code to produce plot

enter image description here

+7

請把你的代碼中的問題本身,而不是附加代碼的圖像。一旦你把代碼放在問題中,一定要使用Ctrl + K來正確格式化它。 –

回答

10

您可能需要另外添加coord_cartesianscale_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

+0

OP可能正在尋找[此代碼的圖像](http://i.imgur.com/JGvPqiv.png),而不是您的複製/粘貼文本版本;) – Gregor

相關問題