2012-05-22 36 views
8

Estoy tratando de trazar un objeto celeste en el cielo (básicamente con coordenadas equivalentes a latitud/longitud). Traje con éxito todos mis puntos utilizando la proyección "aitoff" de la función coord_map, pero en este caso, la cuadrícula está mal visualizada, es decir, las líneas horizontales residuales se siguen mostrando para latitudes diferentes a cero junto con sus proyecciones correctas.Malla mal mostrada con ggplot2

enter image description here

¿Cómo podría eliminar estas líneas?

Aquí es código que reproduce el comportamiento:

library(ggplot2) 
library(mapproj) 
sky2 = data.frame(RA=0, Dec=0) 
skyplot2 <- qplot(RA,Dec,data=sky2,xlim=c(0,360),ylim=c(-89.999,89.999), 
xlab="R.A.(°)", ylab="Decl. (°)",main="Source repartition on the sky") 
skyplot2 + coord_map(projection="aitoff",orientation=c(89.999,180,0)) + 
scale_y_continuous(breaks=(-2:2)*30,limits=c(-89.999,89.999)) + 
scale_x_continuous(breaks=(0:8)*45,limits=c(0,360), 
        labels=c("","","","","","","","","")) 

Respuesta

4

Definitivamente este es un error en ggplot2 así ¿podría presentar este error? https://github.com/hadley/ggplot2/issues?state=openFiled as a bug.

Aquí hay un truco rápido y sucio.

f <- function(x, y, ...) { 
    if (any(is.na(x))) { 
    id <- rle(!is.na(x))$length 
    id <- rep(seq_along(id), id) 
    df <- data.frame(x, y, id) 
    df <- df[order(df$id, df$x), ] 
    } else if (any(is.na(y))) { 
    id <- rle(!is.na(y))$length 
    id <- rep(seq_along(id), id) 
    df <- data.frame(x, y, id) 
    } 
    polylineGrob(df$x, df$y, id = df$id, gp = gpar(col = "white")) 
} 

skyplot2 <- qplot(RA,Dec,data=sky2,xlim=c(0,360),ylim=c(-89.999,89.999), 
        xlab="R.A.(°)", ylab="Decl. (°)",main="Source repartition on the sky") 
skyplot2 + coord_map(projection="aitoff",orientation=c(89.999,180,0)) + 
    scale_y_continuous(breaks=(-2:2)*30,limits=c(-89.999,89.999)) + 
    scale_x_continuous(breaks=(0:8)*45,limits=c(0,360), 
        labels=c("","","","","","","","","")) + 
        opts(panel.grid.major = f) 

enter image description here

Tenga en cuenta que esto puede funcionar sólo con la proyección de aitoff.

2

Sólo tiene que añadir:

+ opts(axis.ticks = theme_blank()) 
+0

Hmm. Eso elimina las marcas en la parte inferior de la figura, pero no las líneas horizontales adicionales (rectas) que el OP desea eliminar. –

+0

oh woops. no leyó la pregunta lo suficientemente cerca. –