1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
Geom <- proto(TopLevel, expr={
class <- function(.) "geom"
parameters <- function(.) {
params <- formals(get("draw", .))
params <- params[setdiff(names(params), c(".","data","scales", "coordinates", "..."))]
required <- rep(NA, length(.$required_aes))
names(required) <- .$required_aes
aesthetics <- c(.$default_aes(), required)
c(params, aesthetics[setdiff(names(aesthetics), names(params))])
}
required_aes <- c()
default_aes <- function(.) {}
default_pos <- function(.) PositionIdentity
guide_geom <- function(.) "point"
draw <- function(...) {}
draw_groups <- function(., data, scales, coordinates, ...) {
if (empty(data)) return(zeroGrob())
groups <- split(data, factor(data$group))
grobs <- lapply(groups, function(group) .$draw(group, scales, coordinates, ...))
ggname(paste(.$objname, "s", sep=""), gTree(
children = do.call("gList", grobs)
))
}
new <- function(., mapping=NULL, data=NULL, stat=NULL, position=NULL, ...){
do.call("layer", list(mapping=mapping, data=data, stat=stat, geom=., position=position, ...))
}
pprint <- function(., newline=TRUE) {
cat("geom_", .$objname, ": ", sep="") # , clist(.$parameters())
if (newline) cat("\n")
}
reparameterise <- function(., data, params) data
# Html documentation ----------------------------------
})
|