Сетка плохо отображается при использовании ggplot2

Я пытаюсь нарисовать небесный объект на небе (в основном с координатами, эквивалентными широте / долготе). Я успешно построил все свои точки, используя проекцию "aitoff" функции coord_map, но в этом случае сетка отображается плохо, т.е. остаточные горизонтальные линии все еще отображаются для широт, не равных нулю, вместе с их правильными проекциями.

введите здесь описание изображения

Как я мог удалить эти строки?

Вот код, который воспроизводит поведение:

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

person Arnaud    schedule 22.05.2012    source источник


Ответы (2)


Определенно это ошибка в ggplot2, не могли бы вы зарегистрировать эту ошибку? https://github.com/hadley/ggplot2/issues?state=open Зарегистрировано как ошибка.

Вот быстрый и грязный прием.

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)

введите описание изображения здесь

Обратите внимание, что это может работать только с проекцией aitoff.

person kohske    schedule 23.05.2012

Вам просто нужно добавить:

+ opts(axis.ticks = theme_blank())
person Ian Fellows    schedule 22.05.2012
comment
Хм. Это избавляет от отметок в нижней части рисунка, но не от лишних (прямых) горизонтальных линий, которые OP хочет удалить. - person Josh O'Brien; 23.05.2012