2012-05-22 10 views
8

Ich versuche, Himmelskörper am Himmel (im Grunde mit Koordinaten Äquivalent Breite/Länge) zu plotten. Ich zeichnete erfolgreich alle meine Punkte unter Verwendung der "aitoff"-Projektion der coord_map-Funktion auf, aber in diesem Fall wird das Gitter schlecht angezeigt, d. H. Verbleibende horizontale Linien werden immer noch für Breiten ungleich Null zusammen mit ihren korrekten Projektionen angezeigt.Grid schlecht angezeigt mit ggplot2

enter image description here

Wie konnte ich entfernen Sie diese Zeilen?

Hier ist der Code, der das Verhalten reproduziert:

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

Antwort

4

Auf jeden Fall ist dies ein Fehler in ggplot2 so könnten Sie bitte diesen Fehler Datei? https://github.com/hadley/ggplot2/issues?state=openFiled as a bug.

Hier ist ein schneller und schmutziger Hack.

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

Beachten Sie, dass dies nur mit der Aitov-Projektion arbeiten kann.

2

Sie müssen nur hinzufügen:

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

Hmm. Dadurch werden die Ticks am unteren Rand der Figur entfernt, aber nicht die zusätzlichen (geraden) horizontalen Linien, die das OP entfernen möchte. –

+0

oh woops. habe die Frage nicht genau genug gelesen. –