Skip to content

Commit 711ad7c

Browse files
committed
Add access to direction argument of scales::brewer_pal
+ minor example and documentation fixes
1 parent e7e7566 commit 711ad7c

File tree

4 files changed

+47
-30
lines changed

4 files changed

+47
-30
lines changed

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Imports:
2525
grid,
2626
gtable (>= 0.1.1),
2727
reshape2,
28-
scales (>= 0.2.3),
28+
scales (>= 0.2.5),
2929
proto,
3030
MASS
3131
Suggests:

NEWS

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
* Add access to the new `direction` argument of `scales::brewer_pal` and
2+
simplify changing the order of colours for `scale_*_brewer` and
3+
`scale_*_distiller` (@jiho, #1139)
4+
15
ggplot2 1.0.1.9000
26
----------------------------------------------------------------
37

@@ -99,8 +103,8 @@ ggplot2 1.0.1
99103

100104
* Fixes to pass `R CMD check --run-donttest` in R-devel.
101105

102-
* Improvements in to order of colours and legend display of continuous colour
103-
scales extracted from colorbrewer palettes in `scale_*_distiller()` (@jiho, 1076)
106+
* Improvements to order of colours and legend display for continuous colour
107+
scales extracted from colorbrewer palettes by `scale_*_distiller()` (@jiho, 1076)
104108

105109
ggplot2 1.0.0
106110
----------------------------------------------------------------

R/scale-brewer.r

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,18 @@
3232
#' d + scale_colour_brewer(type = "seq")
3333
#' d + scale_colour_brewer(type = "seq", palette = 3)
3434
#'
35-
#' d + scale_colour_brewer(palette = "Blues")
35+
#' d + scale_colour_brewer(palette = "Greens")
3636
#' d + scale_colour_brewer(palette = "Set1")
3737
#'
3838
#' # scale_fill_brewer works just the same as
3939
#' # scale_colour_brewer but for fill colours
40-
#' ggplot(diamonds, aes(x = price, fill = cut)) +
41-
#' geom_histogram(position = "dodge", binwidth = 1000) +
42-
#' scale_fill_brewer()
40+
#' p <- ggplot(diamonds, aes(x = price, fill = cut)) +
41+
#' geom_histogram(position = "dodge", binwidth = 1000)
42+
#' p + scale_fill_brewer()
43+
#' # the order of colour can be reversed
44+
#' p + scale_fill_brewer(direction = -1)
45+
#' # the brewer scales look better on a darker background
46+
#' p + scale_fill_brewer(direction = -1) + theme_dark()
4347
#'
4448
#' # Generate map data
4549
#' library(reshape2) # for melt
@@ -54,41 +58,40 @@
5458
#' v + scale_fill_distiller(palette = 2)
5559
#' v + scale_fill_distiller(type = "div")
5660
#' v + scale_fill_distiller(palette = "Spectral")
57-
#' v + scale_fill_distiller(palette = "Spectral", trans = "reverse")
5861
#' v + scale_fill_distiller(type = "qual")
5962
#' # Not appropriate for continuous data, issues a warning
60-
scale_colour_brewer <- function(..., type = "seq", palette = 1) {
61-
discrete_scale("colour", "brewer", brewer_pal(type, palette), ...)
63+
scale_colour_brewer <- function(..., type = "seq", palette = 1, direction = 1) {
64+
discrete_scale("colour", "brewer", brewer_pal(type, palette, direction), ...)
6265
}
6366

6467
#' @export
6568
#' @rdname scale_brewer
66-
scale_fill_brewer <- function(..., type = "seq", palette = 1) {
67-
discrete_scale("fill", "brewer", brewer_pal(type, palette), ...)
69+
scale_fill_brewer <- function(..., type = "seq", palette = 1, direction = 1) {
70+
discrete_scale("fill", "brewer", brewer_pal(type, palette, direction), ...)
6871
}
6972

7073
#' @export
7174
#' @rdname scale_brewer
72-
scale_colour_distiller <- function(..., type = "seq", palette = 1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar") {
75+
scale_colour_distiller <- function(..., type = "seq", palette = 1, direction = -1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar") {
7376
# warn about using a qualitative brewer palette to generate the gradient
7477
type <- match.arg(type, c("seq", "div", "qual"))
7578
if (type == "qual") {
7679
warning("Using a discrete colour palette in a continuous scale.\n Consider using type = \"seq\" or type = \"div\" instead", call. = FALSE)
7780
}
7881
continuous_scale("colour", "distiller",
79-
gradient_n_pal(rev(brewer_pal(type, palette)(6)), values, space), na.value = na.value, guide = guide, ...)
82+
gradient_n_pal(brewer_pal(type, palette, direction)(6), values, space), na.value = na.value, guide = guide, ...)
8083
# NB: 6 colours per palette gives nice gradients; more results in more saturated colours which do not look as good
8184
}
8285

8386
#' @export
8487
#' @rdname scale_brewer
85-
scale_fill_distiller <- function(..., type = "seq", palette = 1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar") {
88+
scale_fill_distiller <- function(..., type = "seq", palette = 1, direction = -1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar") {
8689
type <- match.arg(type, c("seq", "div", "qual"))
8790
if (type == "qual") {
8891
warning("Using a discrete colour palette in a continuous scale.\n Consider using type = \"seq\" or type = \"div\" instead", call. = FALSE)
8992
}
9093
continuous_scale("fill", "distiller",
91-
gradient_n_pal(rev(brewer_pal(type, palette)(6)), values, space), na.value = na.value, guide = guide, ...)
94+
gradient_n_pal(brewer_pal(type, palette, direction)(6), values, space), na.value = na.value, guide = guide, ...)
9295
}
9396

9497
# icon.brewer <- function() {

man/scale_brewer.Rd

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,23 @@
99
\alias{scale_fill_distiller}
1010
\title{Sequential, diverging and qualitative colour scales from colorbrewer.org}
1111
\usage{
12-
scale_colour_brewer(..., type = "seq", palette = 1)
12+
scale_colour_brewer(..., type = "seq", palette = 1, direction = 1)
1313

14-
scale_fill_brewer(..., type = "seq", palette = 1)
14+
scale_fill_brewer(..., type = "seq", palette = 1, direction = 1)
1515

16-
scale_colour_distiller(..., type = "seq", palette = 1, values = NULL,
17-
space = "Lab", na.value = "grey50", guide = "colourbar")
16+
scale_colour_distiller(..., type = "seq", palette = 1, direction = -1,
17+
values = NULL, space = "Lab", na.value = "grey50",
18+
guide = "colourbar")
1819

19-
scale_fill_distiller(..., type = "seq", palette = 1, values = NULL,
20-
space = "Lab", na.value = "grey50", guide = "colourbar")
20+
scale_fill_distiller(..., type = "seq", palette = 1, direction = -1,
21+
values = NULL, space = "Lab", na.value = "grey50",
22+
guide = "colourbar")
2123

22-
scale_color_brewer(..., type = "seq", palette = 1)
24+
scale_color_brewer(..., type = "seq", palette = 1, direction = 1)
2325

24-
scale_color_distiller(..., type = "seq", palette = 1, values = NULL,
25-
space = "Lab", na.value = "grey50", guide = "colourbar")
26+
scale_color_distiller(..., type = "seq", palette = 1, direction = -1,
27+
values = NULL, space = "Lab", na.value = "grey50",
28+
guide = "colourbar")
2629
}
2730
\arguments{
2831
\item{...}{Other arguments passed on to \code{\link{discrete_scale}}
@@ -33,6 +36,10 @@ to control name, limits, breaks, labels and so forth.}
3336
\item{palette}{If a string, will use that named palette. If a number, will
3437
index into the list of palettes of appropriate \code{type}}
3538

39+
\item{direction}{Sets the order of colors in the scale. If 1, the default,
40+
colors are as output by \code{\link[RColorBrewer]{brewer.pal}}. If -1, the
41+
order of colors is reversed.}
42+
3643
\item{values}{if colours should not be evenly positioned along the gradient
3744
this vector gives the position (between 0 and 1) for each colour in the
3845
\code{colours} vector. See \code{\link{rescale}} for a convience function
@@ -73,14 +80,18 @@ d + scale_colour_brewer(expression(clarity[beta]))
7380
d + scale_colour_brewer(type = "seq")
7481
d + scale_colour_brewer(type = "seq", palette = 3)
7582

76-
d + scale_colour_brewer(palette = "Blues")
83+
d + scale_colour_brewer(palette = "Greens")
7784
d + scale_colour_brewer(palette = "Set1")
7885

7986
# scale_fill_brewer works just the same as
8087
# scale_colour_brewer but for fill colours
81-
ggplot(diamonds, aes(x = price, fill = cut)) +
82-
geom_histogram(position = "dodge", binwidth = 1000) +
83-
scale_fill_brewer()
88+
p <- ggplot(diamonds, aes(x = price, fill = cut)) +
89+
geom_histogram(position = "dodge", binwidth = 1000)
90+
p + scale_fill_brewer()
91+
# the order of colour can be reversed
92+
p + scale_fill_brewer(direction = -1)
93+
# the brewer scales look better on a darker background
94+
p + scale_fill_brewer(direction = -1) + theme_dark()
8495

8596
# Generate map data
8697
library(reshape2) # for melt
@@ -95,7 +106,6 @@ v + scale_fill_distiller()
95106
v + scale_fill_distiller(palette = 2)
96107
v + scale_fill_distiller(type = "div")
97108
v + scale_fill_distiller(palette = "Spectral")
98-
v + scale_fill_distiller(palette = "Spectral", trans = "reverse")
99109
v + scale_fill_distiller(type = "qual")
100110
# Not appropriate for continuous data, issues a warning
101111
}

0 commit comments

Comments
 (0)