diff --git a/NEWS b/NEWS index 3444b28e86..fd50e48931 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,10 @@ ggplot2 0.9.3.1.99 ---------------------------------------------------------------- + +* Add a `direction` argument to brewer scales to be able to reverse the order of + colours. In many diverging scales, the warm colours get associated with lowest + values in an ordered factor. (@jiho, #924) + * `stat_ellipse()` adds data ellipses. It supports bivariate normal and t distributions, as well as a euclidian distance circle. (@jofrhwld, #926) diff --git a/R/scale-brewer.r b/R/scale-brewer.r index 9fc8d632a9..071e647565 100644 --- a/R/scale-brewer.r +++ b/R/scale-brewer.r @@ -33,6 +33,9 @@ #' d + scale_colour_brewer(palette = "Blues") #' d + scale_colour_brewer(palette = "Set1") #' +#' # The order of colours in the palette can be swapped +#' d + scale_colour_brewer(palette = "Blues", direction = -1) +#' #' # scale_fill_brewer works just the same as #' # scale_colour_brewer but for fill colours #' ggplot(diamonds, aes(x = price, fill = cut)) + @@ -51,41 +54,41 @@ #' v + scale_fill_distiller(palette = 2) #' v + scale_fill_distiller(type = "div") #' v + scale_fill_distiller(palette = "Spectral") -#' v + scale_fill_distiller(palette = "Spectral", trans = "reverse") +#' v + scale_fill_distiller(palette = "Spectral", direction = -1) #' v + scale_fill_distiller(type = "qual") #' # Not appropriate for continuous data, issues a warning -scale_colour_brewer <- function(..., type = "seq", palette = 1) { - discrete_scale("colour", "brewer", brewer_pal(type, palette), ...) +scale_colour_brewer <- function(..., type = "seq", palette = 1, direction = 1) { + discrete_scale("colour", "brewer", brewer_pal(type, palette, direction), ...) } #' @export #' @rdname scale_brewer -scale_fill_brewer <- function(..., type = "seq", palette = 1) { - discrete_scale("fill", "brewer", brewer_pal(type, palette), ...) +scale_fill_brewer <- function(..., type = "seq", palette = 1, direction = 1) { + discrete_scale("fill", "brewer", brewer_pal(type, palette, direction), ...) } #' @export #' @rdname scale_brewer -scale_colour_distiller <- function(..., type = "seq", palette = 1, values = NULL, space = "Lab", na.value = "grey50") { +scale_colour_distiller <- function(..., type = "seq", palette = 1, direction = -1, values = NULL, space = "Lab", na.value = "grey50") { # warn about using a qualitative brewer palette to generate the gradient type <- match.arg(type, c("seq", "div", "qual")) if (type == "qual") { warning("Using a discrete colour palette in a continuous scale.\n Consider using type = \"seq\" or type = \"div\" instead", call. = FALSE) } continuous_scale("colour", "distiller", - gradient_n_pal(brewer_pal(type, palette)(6), values, space), na.value = na.value, ...) + gradient_n_pal(brewer_pal(type, palette, direction)(6), values, space), na.value = na.value, ...) # NB: 6 colours per palette gives nice gradients; more results in more saturated colours which do not look as good } #' @export #' @rdname scale_brewer -scale_fill_distiller <- function(..., type = "seq", palette = 1, values = NULL, space = "Lab", na.value = "grey50") { +scale_fill_distiller <- function(..., type = "seq", palette = 1, direction = 1, values = NULL, space = "Lab", na.value = "grey50") { type <- match.arg(type, c("seq", "div", "qual")) if (type == "qual") { warning("Using a discrete colour palette in a continuous scale.\n Consider using type = \"seq\" or type = \"div\" instead", call. = FALSE) } continuous_scale("fill", "distiller", - gradient_n_pal(brewer_pal(type, palette)(6), values, space), na.value = na.value, ...) + gradient_n_pal(brewer_pal(type, palette, direction)(6), values, space), na.value = na.value, ...) } # icon.brewer <- function() { diff --git a/man/scale_brewer.Rd b/man/scale_brewer.Rd index ffcc0e9f2b..a76765b501 100644 --- a/man/scale_brewer.Rd +++ b/man/scale_brewer.Rd @@ -8,9 +8,9 @@ \alias{scale_fill_distiller} \title{Sequential, diverging and qualitative colour scales from colorbrewer.org} \usage{ -scale_colour_brewer(..., type = "seq", palette = 1) +scale_colour_brewer(..., type = "seq", palette = 1, direction = 1) -scale_fill_brewer(..., type = "seq", palette = 1) +scale_fill_brewer(..., type = "seq", palette = 1, direction = 1) scale_colour_distiller(..., type = "seq", palette = 1, values = NULL, space = "Lab", na.value = "grey50")