1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
|
#' Use values without scaling
#'
#' Use this set of scales when your data has already been scaled, i.e. it
#' already represents aesthetic values that ggplot2 can handle directly.
#' These scales will not produce a legend unless you also supply the `breaks`,
#' `labels`, and type of `guide` you want.
#'
#' The functions `scale_colour_identity()`, `scale_fill_identity()`, `scale_size_identity()`,
#' etc. work on the aesthetics specified in the scale name: `colour`, `fill`, `size`,
#' etc. However, the functions `scale_colour_identity()` and `scale_fill_identity()` also
#' have an optional `aesthetics` argument that can be used to define both `colour` and
#' `fill` aesthetic mappings via a single function call. The functions
#' `scale_discrete_identity()` and `scale_continuous_identity()` are generic scales that
#' can work with any aesthetic or set of aesthetics provided via the `aesthetics`
#' argument.
#'
#' @param ... Other arguments passed on to [discrete_scale()] or
#' [continuous_scale()]
#' @param aesthetics Character string or vector of character strings listing the
#' name(s) of the aesthetic(s) that this scale works with. This can be useful, for
#' example, to apply colour settings to the `colour` and `fill` aesthetics at the
#' same time, via `aesthetics = c("colour", "fill")`.
#' @param guide Guide to use for this scale. Defaults to `"none"`.
#' @examples
#' ggplot(luv_colours, aes(u, v)) +
#' geom_point(aes(colour = col), size = 3) +
#' scale_color_identity() +
#' coord_fixed()
#'
#' df <- data.frame(
#' x = 1:4,
#' y = 1:4,
#' colour = c("red", "green", "blue", "yellow")
#' )
#' ggplot(df, aes(x, y)) + geom_tile(aes(fill = colour))
#' ggplot(df, aes(x, y)) +
#' geom_tile(aes(fill = colour)) +
#' scale_fill_identity()
#'
#' # To get a legend guide, specify guide = "legend"
#' ggplot(df, aes(x, y)) +
#' geom_tile(aes(fill = colour)) +
#' scale_fill_identity(guide = "legend")
#' # But you'll typically also need to supply breaks and labels:
#' ggplot(df, aes(x, y)) +
#' geom_tile(aes(fill = colour)) +
#' scale_fill_identity("trt", labels = letters[1:4], breaks = df$colour,
#' guide = "legend")
#'
#' # cyl scaled to appropriate size
#' ggplot(mtcars, aes(mpg, wt)) +
#' geom_point(aes(size = cyl))
#'
#' # cyl used as point size
#' ggplot(mtcars, aes(mpg, wt)) +
#' geom_point(aes(size = cyl)) +
#' scale_size_identity()
#' @name scale_identity
#' @aliases NULL
NULL
#' @rdname scale_identity
#' @export
scale_colour_identity <- function(..., guide = "none", aesthetics = "colour") {
sc <- discrete_scale(aesthetics, "identity", identity_pal(), ..., guide = guide,
super = ScaleDiscreteIdentity)
sc
}
#' @rdname scale_identity
#' @export
scale_fill_identity <- function(..., guide = "none", aesthetics = "fill") {
sc <- discrete_scale(aesthetics, "identity", identity_pal(), ..., guide = guide,
super = ScaleDiscreteIdentity)
sc
}
#' @rdname scale_identity
#' @export
scale_shape_identity <- function(..., guide = "none") {
sc <- continuous_scale("shape", "identity", identity_pal(), ..., guide = guide,
super = ScaleContinuousIdentity)
sc
}
#' @rdname scale_identity
#' @export
scale_linetype_identity <- function(..., guide = "none") {
sc <- discrete_scale("linetype", "identity", identity_pal(), ..., guide = guide,
super = ScaleDiscreteIdentity)
sc
}
#' @rdname scale_identity
#' @export
scale_linewidth_identity <- function(..., guide = "none") {
sc <- continuous_scale("linewidth", "identity", identity_pal(), ...,
guide = guide, super = ScaleContinuousIdentity)
sc
}
#' @rdname scale_identity
#' @export
scale_alpha_identity <- function(..., guide = "none") {
sc <- continuous_scale("alpha", "identity", identity_pal(), ..., guide = guide,
super = ScaleContinuousIdentity)
sc
}
#' @rdname scale_identity
#' @export
scale_size_identity <- function(..., guide = "none") {
sc <- continuous_scale("size", "identity", identity_pal(), ..., guide = guide,
super = ScaleContinuousIdentity)
sc
}
#' @rdname scale_identity
#' @export
scale_discrete_identity <- function(aesthetics, ..., guide = "none") {
sc <- discrete_scale(aesthetics, "identity", identity_pal(), ..., guide = guide,
super = ScaleDiscreteIdentity)
sc
}
#' @rdname scale_identity
#' @export
scale_continuous_identity <- function(aesthetics, ..., guide = "none") {
sc <- continuous_scale(aesthetics, "identity", identity_pal(), ..., guide = guide,
super = ScaleContinuousIdentity)
sc
}
#' @rdname ggplot2-ggproto
#' @format NULL
#' @usage NULL
#' @export
ScaleDiscreteIdentity <- ggproto("ScaleDiscreteIdentity", ScaleDiscrete,
map = function(x) {
if (is.factor(x)) {
as.character(x)
} else {
x
}
},
train = function(self, x) {
# do nothing if no guide, otherwise train so we know what breaks to use
if (identical(self$guide, "none")) return()
ggproto_parent(ScaleDiscrete, self)$train(x)
}
)
#' @rdname ggplot2-ggproto
#' @format NULL
#' @usage NULL
#' @export
ScaleContinuousIdentity <- ggproto("ScaleContinuousIdentity", ScaleContinuous,
map = function(x) {
if (is.factor(x)) {
as.character(x)
} else {
x
}
},
train = function(self, x) {
# do nothing if no guide, otherwise train so we know what breaks to use
if (identical(self$guide, "none")) return()
ggproto_parent(ScaleContinuous, self)$train(x)
}
)
|