diff --git a/NAMESPACE b/NAMESPACE index af6f39040c..9bf3e7a431 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -582,6 +582,8 @@ export(scale_linewidth_continuous) export(scale_linewidth_date) export(scale_linewidth_datetime) export(scale_linewidth_discrete) +export(scale_linewidth_identity) +export(scale_linewidth_manual) export(scale_linewidth_ordinal) export(scale_radius) export(scale_shape) diff --git a/NEWS.md b/NEWS.md index de53e65bb9..b0706b15da 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # ggplot2 (development version) +* Added `scale_linewidth_manual()` and `scale_linewidth_identity()` to support + the `linewidth` aesthetic (@teunbrand, #5050). * Automatic breaks in `scale_*_binned()` should no longer be out-of-bounds, and automatic limits expand to include these (@teunbrand, #5095, #5100). * Renamed computed aesthetic in `stat_ecdf()` to `ecdf`, to prevent incorrect diff --git a/R/scale-identity.r b/R/scale-identity.r index f85c94c76a..aef624d488 100644 --- a/R/scale-identity.r +++ b/R/scale-identity.r @@ -95,6 +95,15 @@ scale_linetype_identity <- function(..., guide = "none") { 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") { diff --git a/R/scale-manual.r b/R/scale-manual.r index 96cbaf8c47..8be1678073 100644 --- a/R/scale-manual.r +++ b/R/scale-manual.r @@ -110,6 +110,12 @@ scale_linetype_manual <- function(..., values, breaks = waiver(), na.value = "bl manual_scale("linetype", values, breaks, ..., na.value = na.value) } +#' @rdname scale_manual +#' @export +scale_linewidth_manual <- function(..., values, breaks = waiver(), na.value = NA) { + manual_scale("linewidth", values, breaks, ..., na.value = na.value) +} + #' @rdname scale_manual #' @export scale_alpha_manual <- function(..., values, breaks = waiver(), na.value = NA) { @@ -122,7 +128,6 @@ scale_discrete_manual <- function(aesthetics, ..., values, breaks = waiver()) { manual_scale(aesthetics, values, breaks, ...) } - manual_scale <- function(aesthetic, values = NULL, breaks = waiver(), ..., limits = NULL) { # check for missing `values` parameter, in lieu of providing # a default to all the different scale_*_manual() functions diff --git a/man/scale_identity.Rd b/man/scale_identity.Rd index dd3a41c114..6d7caa2cfa 100644 --- a/man/scale_identity.Rd +++ b/man/scale_identity.Rd @@ -5,6 +5,7 @@ \alias{scale_fill_identity} \alias{scale_shape_identity} \alias{scale_linetype_identity} +\alias{scale_linewidth_identity} \alias{scale_alpha_identity} \alias{scale_size_identity} \alias{scale_discrete_identity} @@ -20,6 +21,8 @@ scale_shape_identity(..., guide = "none") scale_linetype_identity(..., guide = "none") +scale_linewidth_identity(..., guide = "none") + scale_alpha_identity(..., guide = "none") scale_size_identity(..., guide = "none") diff --git a/man/scale_manual.Rd b/man/scale_manual.Rd index ffc783d872..0a7d266939 100644 --- a/man/scale_manual.Rd +++ b/man/scale_manual.Rd @@ -6,6 +6,7 @@ \alias{scale_size_manual} \alias{scale_shape_manual} \alias{scale_linetype_manual} +\alias{scale_linewidth_manual} \alias{scale_alpha_manual} \alias{scale_discrete_manual} \alias{scale_color_manual} @@ -33,6 +34,8 @@ scale_shape_manual(..., values, breaks = waiver(), na.value = NA) scale_linetype_manual(..., values, breaks = waiver(), na.value = "blank") +scale_linewidth_manual(..., values, breaks = waiver(), na.value = NA) + scale_alpha_manual(..., values, breaks = waiver(), na.value = NA) scale_discrete_manual(aesthetics, ..., values, breaks = waiver())