Я пытаюсь создать новый 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()
Выход этого кода
Вы можете увидеть линии расширения за пределы точек, в этом положении. Если я использую функцию по умолчанию geom_line
, это прекрасно. Что не так в моем коде? Кроме того, будет здорово, если кто-нибудь может предложить хороший учебник для написания новых геом.
ggplot(dat,aes(x,y))+geom_line() + geom_point()
[Учебник] (http://docs.ggplot2.org/dev/vignettes/extending-ggplot2.html). – Axeman
@Axeman Я читал, что не повезло. Спасибо – Koundy
Вы сравнили свой 'geom_line1' с источником для' geom_line'? – Axeman