2013-10-02 92 views
4

我有以下簡易R代碼:R:置信區間被部分地用GGPLOT2顯示(使用geom_smooth())

disciplines <- c("A","C","B","D","E") 
# To stop ggplot from imposing alphabetical ordering on x-axis 
disciplines <- factor(disciplines, levels=disciplines, ordered=T) 

d1 <- c(0.498, 0.521, 0.332, 0.04, 0.04) 
d2 <- c(0.266, 0.202, 0.236, 0.06, 0.06) 
d3 <- c(0.983, 0.755, 0.863, 0.803, 0.913) 
d4 <- c(0.896, 0.802, 0.960, 0.611, 0.994) 

df <- data.frame(disciplines, d1, d2, d3, d4) 
df.m <- melt(df) 
graph <- ggplot(df.m, aes(group=1,disciplines,value,colour=variable,shape=variable)) + 
     geom_point() + 
     geom_smooth(stat="smooth", method=loess, level=0.95) + 
     scale_x_discrete(name="Disciplines") + 
     scale_y_continuous(limits=c(-1,1), name="Measurement") 

輸出看起來像這樣: enter image description here

爲什麼置信區間不沿整個曲線顯示?

注:

  1. 我不希望有fullrange=TRUE因爲那只是產生一個單一的直線藍線,而不是在電流輸出的鋸齒形狀。
  2. 我比較該圖與具有在負值另一個情節(0,-1]的範圍,這就是爲什麼在y軸上具有limits=c(-1,1)

回答

8

對於置信區間的前三段,範圍的頂端至少部分超出範圍(邊界是[-1,1],而不是軸上稍微擴大的範圍)。 ggplot的默認行爲是不顯示任何部分超出界限的對象。您可以通過添加oob=scales::rescale_nonescale_y_continuous解決這個問題:

library(scales) 
graph <- ggplot(df.m, aes(group=1,disciplines,value,colour=variable,shape=variable)) + 
     geom_point() + 
     geom_smooth(stat="smooth", method=loess, level=0.95) + 
     scale_x_discrete(name="Disciplines") + 
     scale_y_continuous(limits=c(-1,1), name="Measurement", oob=rescale_none) 
+0

這工作!感謝您的快速回答。我正盯着y軸的下半部分,認爲有些事情是錯誤的......但我忘記了上限是1.0!置信區間只是稍微超出了一點點。我有一種感覺,你的回答爲我在R-infested未來中搜索了很多小時。 –

+2

請注意,您需要明確加載'scales'包。 – mnel

+0

@Noam Ross,在'?continuous_scale'裏面只寫着「oob:\t 如何處理超出範圍限制的值(超出範圍)?'。我在哪裏可以閱讀更多關於」該做什麼「的內容? – Henrik

4

更好的記錄,也許更直觀,解決辦法是簡單地使用coord_cartesian

ggplot(df.m, aes(group=1,disciplines,value,colour=variable,shape=variable)) + 
     geom_point() + 
     geom_smooth(stat="smooth", method=loess, level=0.95) + 
     scale_x_discrete(name="Disciplines") + 
     coord_cartesian(ylim = c(-1,1)) 
相關問題