2011-07-25 82 views
12

我有兩組誤差點的點。我想抵消第二個,所以它顯示在第一集略微下降,所以它不會掩蓋原來的。ggplot2偏移scatterplot點

這是一個模擬數據集:

x=runif(4,-2,2) 
y=c("A","B","C","D") 
upper=x+2 
lower=x-2 
x_1=runif(4,-1,3) 
upper_1=x_1+1 
lower_1=x_1-2 

這裏是我用來製造陰謀代碼:

qplot(x,y)+ 
    geom_point(size=6)+ 
    geom_errorbarh(aes(xmax=upper,xmin=lower),size=1)+ 
    geom_point(aes(x_1,y),size=6,pch=8,vjust=-1,col="grey40")+ 
    geom_errorbarh(aes(xmax=upper_1,xmin=lower_1),size=1,col="grey40") 

,這裏是劇情:

scatterplot

我想灰色的星號和相關的錯誤欄被繪製成一公頃ir下方的黑圈和相關的誤差線。我會轉換數據集,但Y軸是分類變量。

+0

裏奇的回答比我的方法好得多,所以我刪除了我的。 –

回答

20

使用Richie的重組你的數據,這也是可能的範圍內ggplot純粹,而不必亂用軸:

dodge <- position_dodge(width=0.5) 
p <- ggplot(dfr,aes(x=y,y=x,colour=type)) + 
     geom_point(aes(shape=type),position=dodge) + 
     geom_errorbar(aes(ymax=upper,ymin=lower),position = dodge) + 
     scale_colour_manual(values = c('gray','black')) + 
     scale_shape_manual(values = c(8,19)) + 
     coord_flip() + 
     opts(legend.position="none") 

,給了我這樣的情節:

enter image description here

注意:自版本0.9.2 opts已經theme一直replaced

+ theme(legend.position = "none") 
+0

對不起,不熟悉scale_shape_manual和coord_flip參數,但qplot正在反彈一個錯誤:對二元運算符的非數字參數 – jslefche

+0

@jslefche - 您可能會在嘗試將此解決方案轉換爲'qplot'時引入錯誤。學會使用'ggplot()',它會帶來好處。 – joran

+0

啊,我看到你在那裏用coord_flip()做了什麼。非常好。 'ggplot()'很好用。標記爲已回答。 – jslefche

10

將您的數據重組爲數據框。

x = runif(4,-2,2) 
x_1 = runif(4,-1,3) 
dfr <- data.frame(
    x = c(x, x_1), 
    y = rep(c("A","B","C","D"), 2), 
    upper = c(x+2, x_1+1), 
    lower = c(x-2, x_1-2), 
    type = rep(c("alpha", "beta"), each = 4) 
) 

增加一列,就是因素y的數字版本。

dfr$y_numeric <- with(dfr, 
    as.numeric(y) - ifelse(type == "alpha", 0, 0.1) 
) 

      x y upper  lower type y_numeric 
1 0.16694617 A 2.166946 -1.83305383 alpha  1.0 
2 1.95060734 B 3.950607 -0.04939266 alpha  2.0 
3 1.85516860 C 3.855169 -0.14483140 alpha  3.0 
4 0.08773196 D 2.087732 -1.91226804 alpha  4.0 
5 0.74837995 A 1.748380 -1.25162005 beta  0.9 
6 0.61489655 B 1.614897 -1.38510345 beta  1.9 
7 2.31641418 C 3.316414 0.31641418 beta  2.9 
8 2.62842027 D 3.628420 0.62842027 beta  3.9 

現在您的繪圖代碼更簡單。

ggplot(dfr, aes(x, y_numeric, colour = type)) + 
    geom_point(size = 6) + 
    geom_errorbarh(aes(xmax = upper,xmin = lower), size = 1) + 
    scale_colour_grey() 

final image with staggered plots

1

賈裏德泛達在github上一個夢幻般的劇本起來,創建一個新的功能,position_dodgev,對於水平誤差線。

它在這裏: https://github.com/jaredlander/coefplot/blob/master/R/position.r

,我發現它通過他原來的職位,它具有目前沒有一起工作我安裝GGPLOT2的舊版本: http://www.jaredlander.com/2013/02/vertical-dodging-in-ggplot2/

您可以使用自己的功能你將與​​geom_errorbar,如position_dodge,

... + geom_errorbarh(aes(xmin = LowInner, 
    xmax = HighInner), height = 0.5, lwd = 1, position = position_dodgev(height = 0.8)) 

該解決方案爲我,爲我刻面的​​情節,也不想惹AR在data.frame中創建一個新列。