@baptiste mi ha indirizzato a un post della bacheca che menziona la funzione set_default_scale
che può essere utilizzata per impostare una tavolozza predefinita. La seguente soluzione funziona solo con le vecchie versioni di ggplot2, comunque.
Per prima cosa abbiamo bisogno di una funzione che produca nomi di colori o codici. Ho chiamato il mio magazine.colours
:
magazine.colours <- function(n, set=NULL) {
set <- match.arg(set, c('1', '2'))
palette <- c("red4", "darkslategray3", "dodgerblue1", "darkcyan",
"gray79", "black", "skyblue2", "dodgerblue4",
"purple4", "maroon", "chocolate1", "bisque3", "bisque",
"seagreen4", "lightgreen", "skyblue4", "mediumpurple3",
"palevioletred1", "lightsalmon4", "darkgoldenrod1")
if (set == 2)
palette <- rev(palette)
if (n > length(palette))
warning('generated palette has duplicated colours')
rep(palette, length.out=n)
}
(Si accetta un argomento opzionale set
solo a dimostrare che non si è limitato a una singola palette.) Ok, ora creiamo una "scala", che ho chiamato magazine
. Si basa su scala birraio di ggplot e il codice è abbastanza brutto:
ScaleMagazine <- proto(ScaleColour, expr={
objname <- 'magazine'
new <- function(., name=NULL, set=NULL, na.colour='yellowgreen',
limits=NULL, breaks = NULL, labels=NULL,
formatter = identity, variable, legend = TRUE) {
b_and_l <- check_breaks_and_labels(breaks, labels)
.$proto(name=name, set=set, .input=variable, .output=variable,
.labels = b_and_l$labels, breaks = b_and_l$breaks,
limits= limits, formatter = formatter, legend = legend,
na.colour = na.colour)
}
output_set <- function(.) {
missing <- is.na(.$input_set())
n <- sum(!missing)
palette <- magazine.colours(n, .$set)
missing_colour(palette, missing, .$na.colour)
}
max_levels <- function(.) Inf
})
scale_colour_magazine <- ScaleMagazine$build_accessor(list(variable = '"colour"'))
scale_fill_magazine <- ScaleMagazine$build_accessor(list(variable = '"fill"'))
La cosa importante è quello di definire output_set
che è la funzione che ggplot chiamate per ottenere i nomi dei colori/codici. Inoltre, se sono necessari argomenti aggiuntivi, è necessario includerli in new
e successivamente come .$argument_name
. Nell'esempio sopra, output_set
chiama semplicemente magazine.colours
.
Ora, controllare la nuova scala realtà non funziona:
qplot(mpg, wt, data=mtcars, shape=21,
colour=factor(carb), fill=factor(carb)) +
scale_colour_magazine(set='1') +
scale_fill_magazine(set='1')
per renderlo il valore predefinito, è sufficiente utilizzare set_default_scale
.
set_default_scale("colour", "discrete", "magazine")
set_default_scale("fill", "discrete", "magazine")
E così sarà.
> qplot(mpg, wt, data=mtcars, colour=factor(carb), fill=factor(carb))

[questo post] (http://groups.google.com/group/ggplot2-dev/browse_thread/thread/fc838059c281e835?pli=1) dovrebbe essere utile. – baptiste
Grazie. Lo terrò per dopo, ma ora sono bloccato con la versione 0.8.9. –