2016-03-21 9 views
2

ich von ggplot2: Multiple color scales or shift colors systematically on different layers? GeomBoxplotDark Umgebung bin mitvon proto Umzug in ggproto Umgebungen zu schaffen

jedoch ggplot2 weggezogen von Proto zu ggproto und so ist das nicht mehr funktionieren.

Der spezifische Code ist:

require(ggplot2) 

GeomBoxplotDark <- proto(ggplot2:::GeomBoxplot, 
    draw <- function(., data, ..., outlier.colour = "black", outlier.shape = 16, outlier.size = 2) { 
defaults <- with(data, {        # ** OPENING "{" ADDED ** 
cols_dk <- rgb2hsv(col2rgb(colour)) - c(0, 0, 0.2)  # ** LINE ADDED  ** 
cols_dk <- hsv(cols_dk[1,], cols_dk[2,], cols_dk[3,]) # ** LINE ADDED  ** 
data.frame(x = x, xmin = xmin, xmax = xmax, 
    colour = cols_dk,         # ** EDITED, PASSING IN cols_dk ** 
    size = size, 
    linetype = 1, group = 1, alpha = 1, 
    fill = alpha(fill, alpha), 
    stringsAsFactors = FALSE 
)})             # ** CLOSING "}" ADDED ** 
defaults2 <- defaults[c(1,1), ] 

if (!is.null(data$outliers) && length(data$outliers[[1]] >= 1)) { 
    outliers_grob <- with(data, 
    GeomPoint$draw(data.frame(
     y = outliers[[1]], x = x[rep(1, length(outliers[[1]]))], 
     colour=I(outlier.colour), shape = outlier.shape, alpha = 1, 
     size = outlier.size, fill = NA), ... 
    ) 
) 
} else { 
    outliers_grob <- NULL 
} 

with(data, ggname(.$my_name(), grobTree(
    outliers_grob, 
    GeomPath$draw(data.frame(y=c(upper, ymax), defaults2), ...), 
    GeomPath$draw(data.frame(y=c(lower, ymin), defaults2), ...), 
    GeomRect$draw(data.frame(ymax = upper, ymin = lower, defaults), ...), 
    GeomRect$draw(data.frame(ymax = middle, ymin = middle, defaults), ...) 
))) 
    } 
) 

und es gibt die folgenden Fehler: _inherit muss ein ggproto Objekt sein.

Meine Frage ist: Wie kann ich diesen Fehler lösen, so dass ich die Umgebung mit ggproto erstellen kann? Vielen Dank im Voraus.

Antwort

0

Folgendes funktioniert für mich. Ich fügte die expr={} Verpackung hinzu.

GeomBoxplotDark <- ggproto(ggplot2:::GeomBoxplot,expr={ 
           draw <- function(., data, ..., outlier.colour = "black", outlier.shape = 16, outlier.size = 2) { 
           defaults <- with(data, {        # ** OPENING "{" ADDED ** 
            cols_dk <- rgb2hsv(col2rgb(colour)) - c(0, 0, 0.2)  # ** LINE ADDED  ** 
            cols_dk <- hsv(cols_dk[1,], cols_dk[2,], cols_dk[3,]) # ** LINE ADDED  ** 
            data.frame(x = x, xmin = xmin, xmax = xmax, 
               colour = cols_dk,         # ** EDITED, PASSING IN cols_dk ** 
               size = size, 
               linetype = 1, group = 1, alpha = 1, 
               fill = alpha(fill, alpha), 
               stringsAsFactors = FALSE 
            )})             # ** CLOSING "}" ADDED ** 
           defaults2 <- defaults[c(1,1), ] 

           if (!is.null(data$outliers) && length(data$outliers[[1]] >= 1)) { 
            outliers_grob <- with(data, 
                 GeomPoint$draw(data.frame(
                  y = outliers[[1]], x = x[rep(1, length(outliers[[1]]))], 
                  colour=I(outlier.colour), shape = outlier.shape, alpha = 1, 
                  size = outlier.size, fill = NA), ... 
                 ) 
            ) 
           } else { 
            outliers_grob <- NULL 
           } 

           with(data, ggname(.$my_name(), grobTree(
            outliers_grob, 
            GeomPath$draw(data.frame(y=c(upper, ymax), defaults2), ...), 
            GeomPath$draw(data.frame(y=c(lower, ymin), defaults2), ...), 
            GeomRect$draw(data.frame(ymax = upper, ymin = lower, defaults), ...), 
            GeomRect$draw(data.frame(ymax = middle, ymin = middle, defaults), ...) 
           ))) 
           } 
    } 
    )