2012-05-30 13 views
11

Używając ggplot, można uzyskać osie x/y "R-style", które nie występują w punkcie początkowym i które składają się z dwóch rozłączonych zakresów, jak w poniższym przykładzie?Osie w stylu R z ggplotem

enter image description here

Powodem jest tu głównie dostać ggplot działek wyglądać spójna obok nich czysty-R.

+3

to nasuwa się pytanie, dlaczego nie zrobić Działki bazowe (http://rwiki.sciviews.org/doku.php?id=tips:graphics-misc:ggplot2theme_inbase) [wyglądać ggplot2?];) – baptiste

+0

Bo mogę ani nie aktualizuj ani nie przerabiaj wykresów podstawowych. Właściwie rozważałem edycję SVG generowanych przez ggplota, ale to jest taki hack. – Christian

+0

Jeśli chcesz zdigitalizować podstawowe wykresy, możesz wypróbować pakiet 'digitize'. – mnel

Odpowiedz

13

Spróbuj tego,

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

Edit: a related issue has since been discussed w pakiecie ggtheme i potencjalnie zapewnia czystsze rozwiązanie (nie ma potrzeby dostarczania danych wprost do funkcji przerwami).

+0

Bardzo ładne! Myślałem o użyciu opts (axis.line = theme_line()), ale dostaję bardzo dziwne błędy ... –

+0

Tak, ładnie wykonane - dzięki! – Christian

Powiązane problemy