2012-05-22 21 views
8

Sto provando a tracciare l'oggetto celeste sul cielo (fondamentalmente con coordinate equivalenti a latitudine/longitudine). Ho tracciato tutti i miei punti con successo usando la proiezione "aitoff" della funzione coord_map, ma in questo caso la griglia è malamente visualizzata, cioè le linee orizzontali residue sono ancora visualizzate per latitudini non uguali a zero insieme alle loro proiezioni corrette.Grid mal visualizzata con ggplot2

enter image description here

Come potrei rimuovere queste righe?

Qui è il codice che riproduce il comportamento:

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("","","","","","","","","")) 

risposta

4

Sicuramente si tratta di un bug in ggplot2 quindi la prego di file di questo bug? https://github.com/hadley/ggplot2/issues?state=openFiled as a bug.

Ecco un trucco veloce e sporco.

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

noti che questo può funzionare solo con la proiezione Aitoff.

2

Hai solo bisogno di aggiungere:

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

Hmm. Ciò elimina le zecche nella parte inferiore della figura, ma non le linee orizzontali (dirette) in più che l'OP vuole rimuovere. –

+0

oh woops. non ho letto abbastanza attentamente la domanda. –