Skip to content

Commit 0f9fb64

Browse files
authored
Scale name first (#5583)
* name is first scale argument * hotfix for midpoint rescale * add news bullet * document
1 parent dd7887f commit 0f9fb64

30 files changed

+497
-257
lines changed

NEWS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
# ggplot2 (development version)
22

3+
* The `name` argument in most scales is now explicitly the first argument
4+
(#5535)
5+
36
* New `display` argument in `guide_colourbar()` supplants the `raster` argument.
47
In R 4.1.0 and above, `display = "gradient"` will draw a gradient.
8+
59
* When using `geom_dotplot(binaxis = "x")` with a discrete y-variable, dots are
610
now stacked from the y-position rather than from 0 (@teunbrand, #5462)
711

R/scale-alpha.R

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#' or [discrete_scale()] as appropriate, to control name, limits,
1010
#' breaks, labels and so forth.
1111
#' @param range Output range of alpha values. Must lie between 0 and 1.
12+
#' @inheritParams continuous_scale
1213
#' @family colour scales
1314
#' @family alpha scales
1415
#' @seealso
@@ -23,8 +24,8 @@
2324
#' p
2425
#' p + scale_alpha("cylinders")
2526
#' p + scale_alpha(range = c(0.4, 0.8))
26-
scale_alpha <- function(..., range = c(0.1, 1)) {
27-
continuous_scale("alpha", palette = pal_rescale(range), ...)
27+
scale_alpha <- function(name = waiver(), ..., range = c(0.1, 1)) {
28+
continuous_scale("alpha", name = name, palette = pal_rescale(range), ...)
2829
}
2930

3031
#' @rdname scale_alpha
@@ -33,8 +34,8 @@ scale_alpha_continuous <- scale_alpha
3334

3435
#' @rdname scale_alpha
3536
#' @export
36-
scale_alpha_binned <- function(..., range = c(0.1, 1)) {
37-
binned_scale("alpha", palette = pal_rescale(range), ...)
37+
scale_alpha_binned <- function(name = waiver(), ..., range = c(0.1, 1)) {
38+
binned_scale("alpha", name = name, palette = pal_rescale(range), ...)
3839
}
3940

4041
#' @rdname scale_alpha
@@ -48,9 +49,9 @@ scale_alpha_discrete <- function(...) {
4849

4950
#' @rdname scale_alpha
5051
#' @export
51-
scale_alpha_ordinal <- function(..., range = c(0.1, 1)) {
52+
scale_alpha_ordinal <- function(name = waiver(), ..., range = c(0.1, 1)) {
5253
discrete_scale(
53-
"alpha",
54+
"alpha", name = name,
5455
palette = function(n) seq(range[1], range[2], length.out = n),
5556
...
5657
)
@@ -59,13 +60,21 @@ scale_alpha_ordinal <- function(..., range = c(0.1, 1)) {
5960
#' @rdname scale_alpha
6061
#' @export
6162
#' @usage NULL
62-
scale_alpha_datetime <- function(..., range = c(0.1, 1)) {
63-
datetime_scale("alpha", "time", palette = pal_rescale(range), ...)
63+
scale_alpha_datetime <- function(name = waiver(), ..., range = c(0.1, 1)) {
64+
datetime_scale(
65+
aesthetics = "alpha", transform = "time", name = name,
66+
palette = pal_rescale(range),
67+
...
68+
)
6469
}
6570

6671
#' @rdname scale_alpha
6772
#' @export
6873
#' @usage NULL
69-
scale_alpha_date <- function(..., range = c(0.1, 1)){
70-
datetime_scale("alpha", "date", palette = pal_rescale(range), ...)
74+
scale_alpha_date <- function(name = waiver(), ..., range = c(0.1, 1)){
75+
datetime_scale(
76+
aesthetics = "alpha", transform = "date", name = name,
77+
palette = pal_rescale(range),
78+
...
79+
)
7180
}

R/scale-brewer.R

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -83,19 +83,32 @@
8383
#' # or use blender variants to discretise continuous data
8484
#' v + scale_fill_fermenter()
8585
#'
86-
scale_colour_brewer <- function(..., type = "seq", palette = 1, direction = 1, aesthetics = "colour") {
87-
discrete_scale(aesthetics, palette = pal_brewer(type, palette, direction), ...)
86+
scale_colour_brewer <- function(name = waiver(), ..., type = "seq", palette = 1,
87+
direction = 1, aesthetics = "colour") {
88+
discrete_scale(
89+
aesthetics, name = name,
90+
palette = pal_brewer(type, palette, direction),
91+
...
92+
)
8893
}
8994

9095
#' @export
9196
#' @rdname scale_brewer
92-
scale_fill_brewer <- function(..., type = "seq", palette = 1, direction = 1, aesthetics = "fill") {
93-
discrete_scale(aesthetics, palette = pal_brewer(type, palette, direction), ...)
97+
scale_fill_brewer <- function(name = waiver(), ..., type = "seq", palette = 1,
98+
direction = 1, aesthetics = "fill") {
99+
discrete_scale(
100+
aesthetics, name = name,
101+
palette = pal_brewer(type, palette, direction),
102+
...
103+
)
94104
}
95105

96106
#' @export
97107
#' @rdname scale_brewer
98-
scale_colour_distiller <- function(..., type = "seq", palette = 1, direction = -1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar", aesthetics = "colour") {
108+
scale_colour_distiller <- function(name = waiver(), ..., type = "seq",
109+
palette = 1, direction = -1, values = NULL,
110+
space = "Lab", na.value = "grey50",
111+
guide = "colourbar", aesthetics = "colour") {
99112
# warn about using a qualitative brewer palette to generate the gradient
100113
type <- arg_match0(type, c("seq", "div", "qual"))
101114
if (type == "qual") {
@@ -105,7 +118,7 @@ scale_colour_distiller <- function(..., type = "seq", palette = 1, direction = -
105118
))
106119
}
107120
continuous_scale(
108-
aesthetics,
121+
aesthetics, name = name,
109122
palette = pal_gradient_n(pal_brewer(type, palette, direction)(7), values, space),
110123
na.value = na.value, guide = guide, ...
111124
)
@@ -115,7 +128,10 @@ scale_colour_distiller <- function(..., type = "seq", palette = 1, direction = -
115128

116129
#' @export
117130
#' @rdname scale_brewer
118-
scale_fill_distiller <- function(..., type = "seq", palette = 1, direction = -1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar", aesthetics = "fill") {
131+
scale_fill_distiller <- function(name = waiver(), ..., type = "seq",
132+
palette = 1, direction = -1, values = NULL,
133+
space = "Lab", na.value = "grey50",
134+
guide = "colourbar", aesthetics = "fill") {
119135
type <- arg_match0(type, c("seq", "div", "qual"))
120136
if (type == "qual") {
121137
cli::cli_warn(c(
@@ -124,15 +140,18 @@ scale_fill_distiller <- function(..., type = "seq", palette = 1, direction = -1,
124140
))
125141
}
126142
continuous_scale(
127-
aesthetics,
143+
aesthetics, name = name,
128144
palette = pal_gradient_n(pal_brewer(type, palette, direction)(7), values, space),
129145
na.value = na.value, guide = guide, ...
130146
)
131147
}
132148

133149
#' @export
134150
#' @rdname scale_brewer
135-
scale_colour_fermenter <- function(..., type = "seq", palette = 1, direction = -1, na.value = "grey50", guide = "coloursteps", aesthetics = "colour") {
151+
scale_colour_fermenter <- function(name = waiver(), ..., type = "seq",
152+
palette = 1, direction = -1,
153+
na.value = "grey50", guide = "coloursteps",
154+
aesthetics = "colour") {
136155
# warn about using a qualitative brewer palette to generate the gradient
137156
type <- arg_match0(type, c("seq", "div", "qual"))
138157
if (type == "qual") {
@@ -141,18 +160,30 @@ scale_colour_fermenter <- function(..., type = "seq", palette = 1, direction = -
141160
"i" = "Consider using {.code type = \"seq\"} or {.code type = \"div\"} instead"
142161
))
143162
}
144-
binned_scale(aesthetics, palette = pal_binned(pal_brewer(type, palette, direction)), na.value = na.value, guide = guide, ...)
163+
binned_scale(
164+
aesthetics, name = name,
165+
palette = pal_binned(pal_brewer(type, palette, direction)),
166+
na.value = na.value, guide = guide,
167+
...
168+
)
145169
}
146170

147171
#' @export
148172
#' @rdname scale_brewer
149-
scale_fill_fermenter <- function(..., type = "seq", palette = 1, direction = -1, na.value = "grey50", guide = "coloursteps", aesthetics = "fill") {
173+
scale_fill_fermenter <- function(name = waiver(), ..., type = "seq", palette = 1,
174+
direction = -1, na.value = "grey50",
175+
guide = "coloursteps", aesthetics = "fill") {
150176
type <- arg_match0(type, c("seq", "div", "qual"))
151177
if (type == "qual") {
152178
cli::cli_warn(c(
153179
"Using a discrete colour palette in a binned scale",
154180
"i" = "Consider using {.code type = \"seq\"} or {.code type = \"div\"} instead"
155181
))
156182
}
157-
binned_scale(aesthetics, palette = pal_binned(pal_brewer(type, palette, direction)), na.value = na.value, guide = guide, ...)
183+
binned_scale(
184+
aesthetics, name = name,
185+
palette = pal_binned(pal_brewer(type, palette, direction)),
186+
na.value = na.value, guide = guide,
187+
...
188+
)
158189
}

R/scale-discrete-.R

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,18 +61,28 @@
6161
#' geom_point() +
6262
#' scale_x_discrete(labels = abbreviate)
6363
#' }
64-
scale_x_discrete <- function(..., expand = waiver(), guide = waiver(), position = "bottom") {
65-
sc <- discrete_scale(c("x", "xmin", "xmax", "xend"), palette = identity, ...,
66-
expand = expand, guide = guide, position = position, super = ScaleDiscretePosition)
64+
scale_x_discrete <- function(name = waiver(), ..., expand = waiver(),
65+
guide = waiver(), position = "bottom") {
66+
sc <- discrete_scale(
67+
aesthetics = c("x", "xmin", "xmax", "xend"), name = name,
68+
palette = identity, ...,
69+
expand = expand, guide = guide, position = position,
70+
super = ScaleDiscretePosition
71+
)
6772

6873
sc$range_c <- ContinuousRange$new()
6974
sc
7075
}
7176
#' @rdname scale_discrete
7277
#' @export
73-
scale_y_discrete <- function(..., expand = waiver(), guide = waiver(), position = "left") {
74-
sc <- discrete_scale(c("y", "ymin", "ymax", "yend"), palette = identity, ...,
75-
expand = expand, guide = guide, position = position, super = ScaleDiscretePosition)
78+
scale_y_discrete <- function(name = waiver(), ..., expand = waiver(),
79+
guide = waiver(), position = "left") {
80+
sc <- discrete_scale(
81+
aesthetics = c("y", "ymin", "ymax", "yend"), name = name,
82+
palette = identity, ...,
83+
expand = expand, guide = guide, position = position,
84+
super = ScaleDiscretePosition
85+
)
7686

7787
sc$range_c <- ContinuousRange$new()
7888
sc

R/scale-gradient.R

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,30 @@
7575
#' geom_point(aes(colour = z1)) +
7676
#' scale_colour_gradient(low = "yellow", high = "red", na.value = NA)
7777
#'
78-
scale_colour_gradient <- function(..., low = "#132B43", high = "#56B1F7", space = "Lab",
79-
na.value = "grey50", guide = "colourbar", aesthetics = "colour") {
80-
continuous_scale(aesthetics, palette = pal_seq_gradient(low, high, space),
81-
na.value = na.value, guide = guide, ...)
78+
scale_colour_gradient <- function(name = waiver(), ..., low = "#132B43",
79+
high = "#56B1F7", space = "Lab",
80+
na.value = "grey50",
81+
guide = "colourbar", aesthetics = "colour") {
82+
continuous_scale(
83+
aesthetics, name = name,
84+
palette = pal_seq_gradient(low, high, space),
85+
na.value = na.value, guide = guide,
86+
...
87+
)
8288
}
8389

8490
#' @rdname scale_gradient
8591
#' @export
86-
scale_fill_gradient <- function(..., low = "#132B43", high = "#56B1F7", space = "Lab",
87-
na.value = "grey50", guide = "colourbar", aesthetics = "fill") {
88-
continuous_scale(aesthetics, palette = pal_seq_gradient(low, high, space),
89-
na.value = na.value, guide = guide, ...)
92+
scale_fill_gradient <- function(name = waiver(), ..., low = "#132B43",
93+
high = "#56B1F7", space = "Lab",
94+
na.value = "grey50", guide = "colourbar",
95+
aesthetics = "fill") {
96+
continuous_scale(
97+
aesthetics, name = name,
98+
palette = pal_seq_gradient(low, high, space),
99+
na.value = na.value, guide = guide,
100+
...
101+
)
90102
}
91103

92104
#' @inheritParams scales::pal_div_gradient
@@ -95,12 +107,13 @@ scale_fill_gradient <- function(..., low = "#132B43", high = "#56B1F7", space =
95107
#' Defaults to 0.
96108
#' @rdname scale_gradient
97109
#' @export
98-
scale_colour_gradient2 <- function(..., low = muted("red"), mid = "white", high = muted("blue"),
110+
scale_colour_gradient2 <- function(name = waiver(), ..., low = muted("red"),
111+
mid = "white", high = muted("blue"),
99112
midpoint = 0, space = "Lab", na.value = "grey50",
100113
transform = "identity", guide = "colourbar",
101114
aesthetics = "colour") {
102115
continuous_scale(
103-
aesthetics,
116+
aesthetics, name = name,
104117
palette = div_gradient_pal(low, mid, high, space),
105118
na.value = na.value, transform = transform, guide = guide, ...,
106119
rescaler = mid_rescaler(mid = midpoint, transform = transform)
@@ -109,12 +122,13 @@ scale_colour_gradient2 <- function(..., low = muted("red"), mid = "white", high
109122

110123
#' @rdname scale_gradient
111124
#' @export
112-
scale_fill_gradient2 <- function(..., low = muted("red"), mid = "white", high = muted("blue"),
125+
scale_fill_gradient2 <- function(name = waiver(), ..., low = muted("red"),
126+
mid = "white", high = muted("blue"),
113127
midpoint = 0, space = "Lab", na.value = "grey50",
114128
transform = "identity", guide = "colourbar",
115129
aesthetics = "fill") {
116130
continuous_scale(
117-
aesthetics,
131+
aesthetics, name = name,
118132
palette = div_gradient_pal(low, mid, high, space),
119133
na.value = na.value, transform = transform, guide = guide, ...,
120134
rescaler = mid_rescaler(mid = midpoint, transform = transform)
@@ -138,24 +152,28 @@ mid_rescaler <- function(mid, transform = "identity",
138152
#' @param colours,colors Vector of colours to use for n-colour gradient.
139153
#' @rdname scale_gradient
140154
#' @export
141-
scale_colour_gradientn <- function(..., colours, values = NULL, space = "Lab", na.value = "grey50",
142-
guide = "colourbar", aesthetics = "colour", colors) {
155+
scale_colour_gradientn <- function(name = waiver(), ..., colours, values = NULL,
156+
space = "Lab", na.value = "grey50",
157+
guide = "colourbar", aesthetics = "colour",
158+
colors) {
143159
colours <- if (missing(colours)) colors else colours
144160

145161
continuous_scale(
146-
aesthetics,
162+
aesthetics, name = name,
147163
palette = pal_gradient_n(colours, values, space),
148164
na.value = na.value, guide = guide, ...
149165
)
150166
}
151167
#' @rdname scale_gradient
152168
#' @export
153-
scale_fill_gradientn <- function(..., colours, values = NULL, space = "Lab", na.value = "grey50",
154-
guide = "colourbar", aesthetics = "fill", colors) {
169+
scale_fill_gradientn <- function(name = waiver(), ..., colours, values = NULL,
170+
space = "Lab", na.value = "grey50",
171+
guide = "colourbar", aesthetics = "fill",
172+
colors) {
155173
colours <- if (missing(colours)) colors else colours
156174

157175
continuous_scale(
158-
aesthetics,
176+
aesthetics, name = name,
159177
palette = pal_gradient_n(colours, values, space),
160178
na.value = na.value, guide = guide, ...
161179
)

R/scale-grey.R

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,22 @@
2727
#' ggplot(mtcars, aes(mpg, wt)) +
2828
#' geom_point(aes(colour = miss)) +
2929
#' scale_colour_grey(na.value = "green")
30-
scale_colour_grey <- function(..., start = 0.2, end = 0.8, na.value = "red", aesthetics = "colour") {
31-
discrete_scale(aesthetics, palette = pal_grey(start, end),
32-
na.value = na.value, ...)
30+
scale_colour_grey <- function(name = waiver(), ..., start = 0.2, end = 0.8,
31+
na.value = "red", aesthetics = "colour") {
32+
discrete_scale(
33+
aesthetics, name = name,
34+
palette = pal_grey(start, end),
35+
na.value = na.value, ...
36+
)
3337
}
3438

3539
#' @rdname scale_grey
3640
#' @export
37-
scale_fill_grey <- function(..., start = 0.2, end = 0.8, na.value = "red", aesthetics = "fill") {
38-
discrete_scale(aesthetics, palette = pal_grey(start, end),
39-
na.value = na.value, ...)
41+
scale_fill_grey <- function(name = waiver(), ..., start = 0.2, end = 0.8,
42+
na.value = "red", aesthetics = "fill") {
43+
discrete_scale(
44+
aesthetics, name = name,
45+
palette = pal_grey(start, end),
46+
na.value = na.value, ...
47+
)
4048
}

0 commit comments

Comments
 (0)