2012-05-30 28 views
11

Al usar ggplot, ¿es posible obtener ejes x/y "R-style" que no se encuentran en el origen y que en cambio consisten en dos rangos desconectados, como en el siguiente ejemplo?Ejes estilo R con ggplot

enter image description here

La razón aquí es principalmente para obtener ggplot parcelas para buscar consistente junto a los puros-R.

+3

esto plantea la pregunta, ¿por qué no hacer gráficos de base [se ven como ggplot2?] (Http://rwiki.sciviews.org/doku.php?id=tips:graphics-misc:ggplot2theme_inbase);) – baptiste

+0

Porque puedo ni actualizar ni rehacer los gráficos base. De hecho, he considerado editar el SVG de los generados por ggplot, pero eso es un hack. – Christian

+0

Si desea digitalizar los gráficos de base, puede probar el paquete 'digitalizar'. – mnel

Respuesta

13

Prueba de esto,

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

Editar: un related issue has since been discussed en el paquete ggtheme, y potencialmente proporciona una solución más limpia (sin necesidad de proporcionar los datos de forma explícita a la función se rompe).

+0

¡Muy bonito! Pensé en usar opts (axis.line = theme_line()), pero recibo errores muy extraños allí ... –

+0

Sí, muy bien hecho - ¡gracias! – Christian

Cuestiones relacionadas