2012-05-30 44 views
11

使用ggplot,是否有可能得到不符合原點的「R型」x/y軸,而是由兩個斷開的範圍組成,如下例所示?帶ggplot的R型軸

enter image description here

這裏的原因主要是爲了獲得ggplot陰謀一致看旁邊的純-R的。

+3

這引發了一個問題,爲什麼不製作基地[看起來像ggplot2?](http://rwiki.sciviews.org/doku.php?id=tips:graphics-misc:ggplot2theme_inbase);) – baptiste

+0

因爲我可以既不更新也不重做基地。我實際上已經考慮過編輯ggplot生成的SVG,但這真是一個破解。 – Christian

+0

如果你想數字化基地,你可以嘗試'數字化'包。 – mnel

回答

13

嘗試此,

library(ggplot2) 

d <- data.frame(x=1:10, y=rnorm(10)) 

base_breaks_x <- function(x){ 
    b <- pretty(x) 
    d <- data.frame(y=-Inf, yend=-Inf, x=min(b), xend=max(b)) 
    list(geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend), inherit.aes=FALSE), 
     scale_x_continuous(breaks=b)) 
} 
base_breaks_y <- function(x){ 
    b <- pretty(x) 
    d <- data.frame(x=-Inf, xend=-Inf, y=min(b), yend=max(b)) 
    list(geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend), inherit.aes=FALSE), 
     scale_y_continuous(breaks=b)) 
} 

ggplot(d, aes(x,y)) + 
    geom_point() + 
    theme_bw() + 
    theme(panel.border = element_blank(), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank()) + 
    base_breaks_x(d$x) + 
    base_breaks_y(d$y) 

screenshot

編輯:在ggtheme包related issue has since been discussed,並且潛在地提供一個清潔的解決方案(無需明確將數據提供給所述中斷功能)。

+0

非常好!我想使用opts(axis.line = theme_line()),但我得到了非常奇怪的錯誤... –

+0

是的,很好地完成 - 謝謝! – Christian