2016-06-28 2 views
0

Я пытаюсь создать новый geom в ggplot2, который рисует много строк. Однако моя проблема заключается в том, что нарисованные линии не были точными. Вот простая иллюстрация моей проблемы. Рассмотрим примерКак масштабировать данные при создании новой геометрии в ggplot2?

GeomLine1 <- ggproto("GeomLine1", Geom, 
         required_aes = c('x','y'), 
         default_aes = aes(colour = "black"), 
         draw_key = draw_key_abline, 

         draw_panel = function(data, panel_scales, coord) { 

          grid::linesGrob(x=data$x,y=data$y,default.units = 'native')} 
) 

geom_line1 <- function(mapping = NULL, data = NULL, stat = "identity", 
          position = "identity", na.rm = FALSE, show.legend = NA, 
          inherit.aes = TRUE, ...) { 
     layer(
      geom = GeomLine1, mapping = mapping, data = data, stat = stat, 
      position = position, show.legend = show.legend, inherit.aes = inherit.aes, 
      params = list(na.rm = na.rm, ...) 
    ) 
} 

Это новый геом называется geom_line1, который должен нарисовать линию.

dat <- data.frame(x = c(0,10), y = c(0,10)) 

ggplot(dat,aes(x,y))+geom_line1() + geom_point() 

Выход этого кода

enter image description here

Вы можете увидеть линии расширения за пределы точек, в этом положении. Если я использую функцию по умолчанию geom_line, это прекрасно. Что не так в моем коде? Кроме того, будет здорово, если кто-нибудь может предложить хороший учебник для написания новых геом.

ggplot(dat,aes(x,y))+geom_line() + geom_point() 

enter image description here

+0

[Учебник] (http://docs.ggplot2.org/dev/vignettes/extending-ggplot2.html). – Axeman

+0

@Axeman Я читал, что не повезло. Спасибо – Koundy

+0

Вы сравнили свой 'geom_line1' с источником для' geom_line'? – Axeman

ответ

0

Я только что удалось выяснить проблему. Фактически мы должны использовать преобразование данных, подобных этому, и использовать преобразованные данные для построения графика.

coords <- coord$transform(data, panel_scales) 
grid::linesGrob(x=coords$x,y=coords$y,default.units = 'native') 

Вместо data$x и data$y мы должны COORDS $ х и Coords $ у

Смежные вопросы