28
28
# ' - A character vector of breaks
29
29
# ' - A function that takes the limits as input and returns breaks
30
30
# ' as output
31
+ # ' @param na.value The aesthetic value to use for missing (`NA`) values
32
+ # '
31
33
# ' @section Color Blindness:
32
34
# ' Many color palettes derived from RGB combinations (like the "rainbow" color
33
35
# ' palette) are not suitable to support all viewers, especially those with
80
82
81
83
# ' @rdname scale_manual
82
84
# ' @export
83
- scale_colour_manual <- function (... , values , aesthetics = " colour" , breaks = waiver()) {
84
- manual_scale(aesthetics , values , breaks , ... )
85
+ scale_colour_manual <- function (... , values , aesthetics = " colour" , breaks = waiver(), na.value = " grey50 " ) {
86
+ manual_scale(aesthetics , values , breaks , ... , na.value = na.value )
85
87
}
86
88
87
89
# ' @rdname scale_manual
88
90
# ' @export
89
- scale_fill_manual <- function (... , values , aesthetics = " fill" , breaks = waiver()) {
90
- manual_scale(aesthetics , values , breaks , ... )
91
+ scale_fill_manual <- function (... , values , aesthetics = " fill" , breaks = waiver(), na.value = " grey50 " ) {
92
+ manual_scale(aesthetics , values , breaks , ... , na.value = na.value )
91
93
}
92
94
93
95
# ' @rdname scale_manual
94
96
# ' @export
95
- scale_size_manual <- function (... , values , breaks = waiver()) {
96
- manual_scale(" size" , values , breaks , ... )
97
+ scale_size_manual <- function (... , values , breaks = waiver(), na.value = NA ) {
98
+ manual_scale(" size" , values , breaks , ... , na.value = na.value )
97
99
}
98
100
99
101
# ' @rdname scale_manual
100
102
# ' @export
101
- scale_shape_manual <- function (... , values , breaks = waiver()) {
102
- manual_scale(" shape" , values , breaks , ... )
103
+ scale_shape_manual <- function (... , values , breaks = waiver(), na.value = NA ) {
104
+ manual_scale(" shape" , values , breaks , ... , na.value = na.value )
103
105
}
104
106
105
107
# ' @rdname scale_manual
106
108
# ' @export
107
- scale_linetype_manual <- function (... , values , breaks = waiver()) {
108
- manual_scale(" linetype" , values , breaks , ... )
109
+ scale_linetype_manual <- function (... , values , breaks = waiver(), na.value = " blank " ) {
110
+ manual_scale(" linetype" , values , breaks , ... , na.value = na.value )
109
111
}
110
112
111
113
# ' @rdname scale_manual
112
114
# ' @export
113
- scale_alpha_manual <- function (... , values , breaks = waiver()) {
114
- manual_scale(" alpha" , values , breaks , ... )
115
+ scale_alpha_manual <- function (... , values , breaks = waiver(), na.value = NA ) {
116
+ manual_scale(" alpha" , values , breaks , ... , na.value = na.value )
115
117
}
116
118
117
119
# ' @rdname scale_manual
@@ -121,7 +123,7 @@ scale_discrete_manual <- function(aesthetics, ..., values, breaks = waiver()) {
121
123
}
122
124
123
125
124
- manual_scale <- function (aesthetic , values = NULL , breaks = waiver(), ... ) {
126
+ manual_scale <- function (aesthetic , values = NULL , breaks = waiver(), limits = NULL , ... ) {
125
127
# check for missing `values` parameter, in lieu of providing
126
128
# a default to all the different scale_*_manual() functions
127
129
if (is_missing(values )) {
@@ -130,6 +132,10 @@ manual_scale <- function(aesthetic, values = NULL, breaks = waiver(), ...) {
130
132
force(values )
131
133
}
132
134
135
+ if (is.null(limits )) {
136
+ limits <- names(values )
137
+ }
138
+
133
139
# order values according to breaks
134
140
if (is.vector(values ) && is.null(names(values )) && ! is.waive(breaks ) &&
135
141
! is.null(breaks ) && ! is.function(breaks )) {
@@ -146,5 +152,5 @@ manual_scale <- function(aesthetic, values = NULL, breaks = waiver(), ...) {
146
152
}
147
153
values
148
154
}
149
- discrete_scale(aesthetic , " manual" , pal , breaks = breaks , ... )
155
+ discrete_scale(aesthetic , " manual" , pal , breaks = breaks , limits = limits , ... )
150
156
}
0 commit comments