From 279c8106ae8d44dfa7bb6837a73090c4b3b79860 Mon Sep 17 00:00:00 2001 From: Thomas Lin Pedersen Date: Fri, 25 Jan 2019 10:08:13 +0100 Subject: [PATCH 1/5] Implement n_breaks --- R/scale-.r | 13 +++++++++++-- R/scale-continuous.r | 14 ++++++++------ man/borders.Rd | 2 +- man/continuous_scale.Rd | 14 ++++++++++---- man/map_data.Rd | 2 +- man/scale_continuous.Rd | 19 +++++++++++++------ man/scale_gradient.Rd | 4 ++++ man/scale_size.Rd | 4 ++++ 8 files changed, 52 insertions(+), 20 deletions(-) diff --git a/R/scale-.r b/R/scale-.r index fe594c4d05..c805acc21a 100644 --- a/R/scale-.r +++ b/R/scale-.r @@ -196,6 +196,7 @@ ScaleContinuous <- ggproto("ScaleContinuous", Scale, rescaler = rescale, # Used by diverging and n colour gradients x oob = censor, minor_breaks = waiver(), + n_breaks = NULL, is_discrete = function() FALSE, @@ -241,6 +242,9 @@ ScaleContinuous <- ggproto("ScaleContinuous", Scale, } else if (zero_range(as.numeric(limits))) { breaks <- limits[1] } else if (is.waive(self$breaks)) { + if (!is.null(self$n_breaks)) { + assign("n", self$n_breaks, environment(self$trans$breaks)) + } breaks <- self$trans$breaks(limits) } else if (is.function(self$breaks)) { breaks <- self$breaks(limits) @@ -519,6 +523,10 @@ ScaleDiscrete <- ggproto("ScaleDiscrete", Scale, #' each major break) #' - A numeric vector of positions #' - A function that given the limits returns a vector of minor breaks. +#' @param n_breaks An integer guiding the number of major breaks. The algorithm +#' may choose a slightly different number to ensure nice break labels. Will +#' only have an effect if `breaks = waiver()`. Use `NULL` to use the default +#' number of breaks given by the transformation. #' @param labels One of: #' - `NULL` for no labels #' - `waiver()` for the default labels computed by the @@ -552,8 +560,8 @@ ScaleDiscrete <- ggproto("ScaleDiscrete", Scale, #' @param super The super class to use for the constructed scale #' @keywords internal continuous_scale <- function(aesthetics, scale_name, palette, name = waiver(), - breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, - rescaler = rescale, oob = censor, expand = waiver(), na.value = NA_real_, + breaks = waiver(), minor_breaks = waiver(), n_breaks = NULL, labels = waiver(), + limits = NULL, rescaler = rescale, oob = censor, expand = waiver(), na.value = NA_real_, trans = "identity", guide = "legend", position = "left", super = ScaleContinuous) { aesthetics <- standardise_aes_names(aesthetics) @@ -589,6 +597,7 @@ continuous_scale <- function(aesthetics, scale_name, palette, name = waiver(), name = name, breaks = breaks, minor_breaks = minor_breaks, + n_breaks = n_breaks, labels = labels, guide = guide, diff --git a/R/scale-continuous.r b/R/scale-continuous.r index 7134dd8c84..2a6ef37f8c 100644 --- a/R/scale-continuous.r +++ b/R/scale-continuous.r @@ -75,13 +75,14 @@ NULL #' @seealso [sec_axis()] for how to specify secondary axes #' @export scale_x_continuous <- function(name = waiver(), breaks = waiver(), - minor_breaks = waiver(), labels = waiver(), - limits = NULL, expand = waiver(), oob = censor, + minor_breaks = waiver(), n_breaks = NULL, + labels = waiver(), limits = NULL, + expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity", position = "bottom", sec.axis = waiver()) { sc <- continuous_scale( c("x", "xmin", "xmax", "xend", "xintercept", "xmin_final", "xmax_final", "xlower", "xmiddle", "xupper"), - "position_c", identity, name = name, breaks = breaks, + "position_c", identity, name = name, breaks = breaks, n_breaks = n_breaks, minor_breaks = minor_breaks, labels = labels, limits = limits, expand = expand, oob = oob, na.value = na.value, trans = trans, guide = "none", position = position, super = ScaleContinuousPosition @@ -94,13 +95,14 @@ scale_x_continuous <- function(name = waiver(), breaks = waiver(), #' @rdname scale_continuous #' @export scale_y_continuous <- function(name = waiver(), breaks = waiver(), - minor_breaks = waiver(), labels = waiver(), - limits = NULL, expand = waiver(), oob = censor, + minor_breaks = waiver(), n_breaks = NULL, + labels = waiver(), limits = NULL, + expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity", position = "left", sec.axis = waiver()) { sc <- continuous_scale( c("y", "ymin", "ymax", "yend", "yintercept", "ymin_final", "ymax_final", "lower", "middle", "upper"), - "position_c", identity, name = name, breaks = breaks, + "position_c", identity, name = name, breaks = breaks, n_breaks = n_breaks, minor_breaks = minor_breaks, labels = labels, limits = limits, expand = expand, oob = oob, na.value = na.value, trans = trans, guide = "none", position = position, super = ScaleContinuousPosition diff --git a/man/borders.Rd b/man/borders.Rd index 00918d20a6..07544c8cad 100644 --- a/man/borders.Rd +++ b/man/borders.Rd @@ -67,7 +67,7 @@ if (require("maps")) { ia <- map_data("county", "iowa") mid_range <- function(x) mean(range(x)) seats <- do.call(rbind, lapply(split(ia, ia$subregion), function(d) { - data.frame(lat = mid_range(d$lat), long = mid_range(d$long), subregion = unique(d$subregion)) + data.frame(lat = mid_range(d$lat), long = mid_range(d$long), subregion = unique(d$subregion)) })) ggplot(ia, aes(long, lat)) + diff --git a/man/continuous_scale.Rd b/man/continuous_scale.Rd index a62598ccd6..a53dc3a8da 100644 --- a/man/continuous_scale.Rd +++ b/man/continuous_scale.Rd @@ -5,10 +5,11 @@ \title{Continuous scale constructor.} \usage{ continuous_scale(aesthetics, scale_name, palette, name = waiver(), - breaks = waiver(), minor_breaks = waiver(), labels = waiver(), - limits = NULL, rescaler = rescale, oob = censor, - expand = waiver(), na.value = NA_real_, trans = "identity", - guide = "legend", position = "left", super = ScaleContinuous) + breaks = waiver(), minor_breaks = waiver(), n_breaks = NULL, + labels = waiver(), limits = NULL, rescaler = rescale, + oob = censor, expand = waiver(), na.value = NA_real_, + trans = "identity", guide = "legend", position = "left", + super = ScaleContinuous) } \arguments{ \item{aesthetics}{The names of the aesthetics that this scale works with} @@ -43,6 +44,11 @@ each major break) \item A function that given the limits returns a vector of minor breaks. }} +\item{n_breaks}{An integer guiding the number of major breaks. The algorithm +may choose a slightly different number to ensure nice break labels. Will +only have an effect if \code{breaks = waiver()}. Use \code{NULL} to use the default +number of breaks given by the transformation.} + \item{labels}{One of: \itemize{ \item \code{NULL} for no labels diff --git a/man/map_data.Rd b/man/map_data.Rd index a86781457f..ddc28e4bc8 100644 --- a/man/map_data.Rd +++ b/man/map_data.Rd @@ -44,6 +44,6 @@ if (require("maps")) { ggplot(choro, aes(long, lat)) + geom_polygon(aes(group = group, fill = assault / murder)) + coord_map("albers", at0 = 45.5, lat1 = 29.5) - } +} } \keyword{internal} diff --git a/man/scale_continuous.Rd b/man/scale_continuous.Rd index 25c1bdbd1f..579aaeb3a1 100644 --- a/man/scale_continuous.Rd +++ b/man/scale_continuous.Rd @@ -12,14 +12,16 @@ \title{Position scales for continuous data (x & y)} \usage{ scale_x_continuous(name = waiver(), breaks = waiver(), - minor_breaks = waiver(), labels = waiver(), limits = NULL, - expand = waiver(), oob = censor, na.value = NA_real_, - trans = "identity", position = "bottom", sec.axis = waiver()) + minor_breaks = waiver(), n_breaks = NULL, labels = waiver(), + limits = NULL, expand = waiver(), oob = censor, + na.value = NA_real_, trans = "identity", position = "bottom", + sec.axis = waiver()) scale_y_continuous(name = waiver(), breaks = waiver(), - minor_breaks = waiver(), labels = waiver(), limits = NULL, - expand = waiver(), oob = censor, na.value = NA_real_, - trans = "identity", position = "left", sec.axis = waiver()) + minor_breaks = waiver(), n_breaks = NULL, labels = waiver(), + limits = NULL, expand = waiver(), oob = censor, + na.value = NA_real_, trans = "identity", position = "left", + sec.axis = waiver()) scale_x_log10(...) @@ -58,6 +60,11 @@ each major break) \item A function that given the limits returns a vector of minor breaks. }} +\item{n_breaks}{An integer guiding the number of major breaks. The algorithm +may choose a slightly different number to ensure nice break labels. Will +only have an effect if \code{breaks = waiver()}. Use \code{NULL} to use the default +number of breaks given by the transformation.} + \item{labels}{One of: \itemize{ \item \code{NULL} for no labels diff --git a/man/scale_gradient.Rd b/man/scale_gradient.Rd index 31cca12add..b9c25de90d 100644 --- a/man/scale_gradient.Rd +++ b/man/scale_gradient.Rd @@ -69,6 +69,10 @@ each major break) \item A numeric vector of positions \item A function that given the limits returns a vector of minor breaks. }} + \item{n_breaks}{An integer guiding the number of major breaks. The algorithm +may choose a slightly different number to ensure nice break labels. Will +only have an effect if \code{breaks = waiver()}. Use \code{NULL} to use the default +number of breaks given by the transformation.} \item{labels}{One of: \itemize{ \item \code{NULL} for no labels diff --git a/man/scale_size.Rd b/man/scale_size.Rd index c9ec70d115..2e1de730e7 100644 --- a/man/scale_size.Rd +++ b/man/scale_size.Rd @@ -90,6 +90,10 @@ each major break) \item A numeric vector of positions \item A function that given the limits returns a vector of minor breaks. }} + \item{n_breaks}{An integer guiding the number of major breaks. The algorithm +may choose a slightly different number to ensure nice break labels. Will +only have an effect if \code{breaks = waiver()}. Use \code{NULL} to use the default +number of breaks given by the transformation.} \item{labels}{One of: \itemize{ \item \code{NULL} for no labels From be9cdecb847b26bfacec1cf4b9726415eee3fd7c Mon Sep 17 00:00:00 2001 From: Thomas Lin Pedersen Date: Fri, 25 Jan 2019 10:26:44 +0100 Subject: [PATCH 2/5] make sure to unmodify the parent environment --- R/scale-.r | 2 ++ 1 file changed, 2 insertions(+) diff --git a/R/scale-.r b/R/scale-.r index c805acc21a..9014e340e0 100644 --- a/R/scale-.r +++ b/R/scale-.r @@ -243,7 +243,9 @@ ScaleContinuous <- ggproto("ScaleContinuous", Scale, breaks <- limits[1] } else if (is.waive(self$breaks)) { if (!is.null(self$n_breaks)) { + old_n <- get("n", environment(self$trans$breaks)) assign("n", self$n_breaks, environment(self$trans$breaks)) + on.exit(assign("n", old_n, environment(self$trans$breaks))) } breaks <- self$trans$breaks(limits) } else if (is.function(self$breaks)) { From 25f4003d9ef80f342e9c8cbd933eb2903a291853 Mon Sep 17 00:00:00 2001 From: Thomas Lin Pedersen Date: Mon, 28 Jan 2019 11:35:29 +0100 Subject: [PATCH 3/5] change implememtation to align with scales#197 --- R/scale-.r | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/R/scale-.r b/R/scale-.r index 9014e340e0..37a3601c7f 100644 --- a/R/scale-.r +++ b/R/scale-.r @@ -242,12 +242,19 @@ ScaleContinuous <- ggproto("ScaleContinuous", Scale, } else if (zero_range(as.numeric(limits))) { breaks <- limits[1] } else if (is.waive(self$breaks)) { - if (!is.null(self$n_breaks)) { - old_n <- get("n", environment(self$trans$breaks)) - assign("n", self$n_breaks, environment(self$trans$breaks)) - on.exit(assign("n", old_n, environment(self$trans$breaks))) + change_breaks <- if (!is.null(self$n_breaks)) { + if (trans_support_nbreaks(self$trans)) { + TRUE + } else { + warning("The transformation does not support changing number of breaks.\nPlease provide a transformation object that does or avoid using the `n_breaks` argument.", call. = FALSE) + FALSE + } + } + breaks <- if (change_breaks) { + self$trans$breaks(limits, self$n_breaks) + } else { + self$trans$breaks(limits) } - breaks <- self$trans$breaks(limits) } else if (is.function(self$breaks)) { breaks <- self$breaks(limits) } else { @@ -681,3 +688,6 @@ scale_flip_position <- function(scale) { ) invisible() } +trans_support_nbreaks <- function(trans) { + "n" %in% names(formals(trans$breaks)) +} From 78af4f9f3e9701ee595eb5ab04bf382018e8e2f9 Mon Sep 17 00:00:00 2001 From: Thomas Lin Pedersen Date: Tue, 1 Oct 2019 09:44:52 +0200 Subject: [PATCH 4/5] update to match implementation in ScaleBinned --- NEWS.md | 3 +++ R/scale-.r | 27 +++++++++++---------------- R/scale-continuous.r | 8 ++++---- man/continuous_scale.Rd | 4 ++-- man/scale_continuous.Rd | 26 +++++++------------------- man/scale_gradient.Rd | 2 +- man/scale_size.Rd | 8 +++++--- 7 files changed, 33 insertions(+), 45 deletions(-) diff --git a/NEWS.md b/NEWS.md index ac58e9c933..2c3427d7f3 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,8 @@ # ggplot2 (development version) +* `scale_x_continuous()` and `scale_y_continuous()` gains an `n.breaks` argument + guiding the number of automatic generated breaks (@thomasp85, #3102) + * A new scale type has been added, that allows binning of aesthetics at the scale level. It has versions for both position and non-position aesthetics and comes with two new guides (`guide_bins` and `guide_coloursteps`) (@thomasp85, #3096) diff --git a/R/scale-.r b/R/scale-.r index 9c6b6213de..cb000aaa9c 100644 --- a/R/scale-.r +++ b/R/scale-.r @@ -25,7 +25,7 @@ #' each major break) #' - A numeric vector of positions #' - A function that given the limits returns a vector of minor breaks. -#' @param n_breaks An integer guiding the number of major breaks. The algorithm +#' @param n.breaks An integer guiding the number of major breaks. The algorithm #' may choose a slightly different number to ensure nice break labels. Will #' only have an effect if `breaks = waiver()`. Use `NULL` to use the default #' number of breaks given by the transformation. @@ -82,7 +82,7 @@ #' @param super The super class to use for the constructed scale #' @keywords internal continuous_scale <- function(aesthetics, scale_name, palette, name = waiver(), - breaks = waiver(), minor_breaks = waiver(), n_breaks = NULL, + breaks = waiver(), minor_breaks = waiver(), n.breaks = NULL, labels = waiver(), limits = NULL, rescaler = rescale, oob = censor, expand = waiver(), na.value = NA_real_, trans = "identity", guide = "legend", position = "left", @@ -122,7 +122,7 @@ continuous_scale <- function(aesthetics, scale_name, palette, name = waiver(), name = name, breaks = breaks, minor_breaks = minor_breaks, - n_breaks = n_breaks, + n.breaks = n.breaks, labels = labels, guide = guide, @@ -531,7 +531,7 @@ ScaleContinuous <- ggproto("ScaleContinuous", Scale, rescaler = rescale, oob = censor, minor_breaks = waiver(), - n_breaks = NULL, + n.breaks = NULL, is_discrete = function() FALSE, @@ -586,18 +586,13 @@ ScaleContinuous <- ggproto("ScaleContinuous", Scale, if (zero_range(as.numeric(limits))) { breaks <- limits[1] } else if (is.waive(self$breaks)) { - change_breaks <- if (!is.null(self$n_breaks)) { - if (trans_support_nbreaks(self$trans)) { - TRUE - } else { - warning("The transformation does not support changing number of breaks.\nPlease provide a transformation object that does or avoid using the `n_breaks` argument.", call. = FALSE) - FALSE - } - } - breaks <- if (change_breaks) { - self$trans$breaks(limits, self$n_breaks) + if (!is.null(self$n.breaks) && trans_support_nbreaks(self$trans)) { + breaks <- self$trans$breaks(limits, self$n.breaks) } else { - self$trans$breaks(limits) + if (!is.null(self$n.breaks)) { + warning("Ignoring n.breaks. Use a trans object that supports setting number of breaks", call. = FALSE) + } + breaks <- self$trans$breaks(limits) } } else if (is.function(self$breaks)) { breaks <- self$breaks(limits) @@ -972,7 +967,7 @@ ScaleBinned <- ggproto("ScaleBinned", Scale, stop("Invalid breaks specification. Use NULL, not NA", call. = FALSE) } else if (is.waive(self$breaks)) { if (self$nice.breaks) { - if (!is.null(self$n.breaks) && "n" %in% names(formals(self$trans$breaks))) { + if (!is.null(self$n.breaks) && trans_support_nbreaks(self$trans)) { breaks <- self$trans$breaks(limits, n = self$n.breaks) } else { if (!is.null(self$n.breaks)) { diff --git a/R/scale-continuous.r b/R/scale-continuous.r index 5440dd64f6..174e0680e7 100644 --- a/R/scale-continuous.r +++ b/R/scale-continuous.r @@ -74,7 +74,7 @@ NULL #' #' @export scale_x_continuous <- function(name = waiver(), breaks = waiver(), - minor_breaks = waiver(), n_breaks = NULL, + minor_breaks = waiver(), n.breaks = NULL, labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity", @@ -82,7 +82,7 @@ scale_x_continuous <- function(name = waiver(), breaks = waiver(), sec.axis = waiver()) { sc <- continuous_scale( c("x", "xmin", "xmax", "xend", "xintercept", "xmin_final", "xmax_final", "xlower", "xmiddle", "xupper", "x0"), - "position_c", identity, name = name, breaks = breaks, n_breaks = n_breaks, + "position_c", identity, name = name, breaks = breaks, n.breaks = n.breaks, minor_breaks = minor_breaks, labels = labels, limits = limits, expand = expand, oob = oob, na.value = na.value, trans = trans, guide = guide, position = position, super = ScaleContinuousPosition @@ -95,7 +95,7 @@ scale_x_continuous <- function(name = waiver(), breaks = waiver(), #' @rdname scale_continuous #' @export scale_y_continuous <- function(name = waiver(), breaks = waiver(), - minor_breaks = waiver(), n_breaks = NULL, + minor_breaks = waiver(), n.breaks = NULL, labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity", @@ -103,7 +103,7 @@ scale_y_continuous <- function(name = waiver(), breaks = waiver(), sec.axis = waiver()) { sc <- continuous_scale( c("y", "ymin", "ymax", "yend", "yintercept", "ymin_final", "ymax_final", "lower", "middle", "upper", "y0"), - "position_c", identity, name = name, breaks = breaks, n_breaks = n_breaks, + "position_c", identity, name = name, breaks = breaks, n.breaks = n.breaks, minor_breaks = minor_breaks, labels = labels, limits = limits, expand = expand, oob = oob, na.value = na.value, trans = trans, guide = guide, position = position, super = ScaleContinuousPosition diff --git a/man/continuous_scale.Rd b/man/continuous_scale.Rd index e3db3a67f5..e47020117c 100644 --- a/man/continuous_scale.Rd +++ b/man/continuous_scale.Rd @@ -5,7 +5,7 @@ \title{Continuous scale constructor} \usage{ continuous_scale(aesthetics, scale_name, palette, name = waiver(), - breaks = waiver(), minor_breaks = waiver(), n_breaks = NULL, + breaks = waiver(), minor_breaks = waiver(), n.breaks = NULL, labels = waiver(), limits = NULL, rescaler = rescale, oob = censor, expand = waiver(), na.value = NA_real_, trans = "identity", guide = "legend", position = "left", @@ -45,7 +45,7 @@ each major break) \item A function that given the limits returns a vector of minor breaks. }} -\item{n_breaks}{An integer guiding the number of major breaks. The algorithm +\item{n.breaks}{An integer guiding the number of major breaks. The algorithm may choose a slightly different number to ensure nice break labels. Will only have an effect if \code{breaks = waiver()}. Use \code{NULL} to use the default number of breaks given by the transformation.} diff --git a/man/scale_continuous.Rd b/man/scale_continuous.Rd index fd5efea4de..97847343ab 100644 --- a/man/scale_continuous.Rd +++ b/man/scale_continuous.Rd @@ -12,28 +12,16 @@ \title{Position scales for continuous data (x & y)} \usage{ scale_x_continuous(name = waiver(), breaks = waiver(), -<<<<<<< HEAD - minor_breaks = waiver(), n_breaks = NULL, labels = waiver(), + minor_breaks = waiver(), n.breaks = NULL, labels = waiver(), limits = NULL, expand = waiver(), oob = censor, - na.value = NA_real_, trans = "identity", position = "bottom", - sec.axis = waiver()) + na.value = NA_real_, trans = "identity", guide = waiver(), + position = "bottom", sec.axis = waiver()) scale_y_continuous(name = waiver(), breaks = waiver(), - minor_breaks = waiver(), n_breaks = NULL, labels = waiver(), + minor_breaks = waiver(), n.breaks = NULL, labels = waiver(), limits = NULL, expand = waiver(), oob = censor, - na.value = NA_real_, trans = "identity", position = "left", -======= - minor_breaks = waiver(), labels = waiver(), limits = NULL, - expand = waiver(), oob = censor, na.value = NA_real_, - trans = "identity", guide = waiver(), position = "bottom", - sec.axis = waiver()) - -scale_y_continuous(name = waiver(), breaks = waiver(), - minor_breaks = waiver(), labels = waiver(), limits = NULL, - expand = waiver(), oob = censor, na.value = NA_real_, - trans = "identity", guide = waiver(), position = "left", ->>>>>>> 9a45cc8903da804919a7f5f70457cee40f798aae - sec.axis = waiver()) + na.value = NA_real_, trans = "identity", guide = waiver(), + position = "left", sec.axis = waiver()) scale_x_log10(...) @@ -72,7 +60,7 @@ each major break) \item A function that given the limits returns a vector of minor breaks. }} -\item{n_breaks}{An integer guiding the number of major breaks. The algorithm +\item{n.breaks}{An integer guiding the number of major breaks. The algorithm may choose a slightly different number to ensure nice break labels. Will only have an effect if \code{breaks = waiver()}. Use \code{NULL} to use the default number of breaks given by the transformation.} diff --git a/man/scale_gradient.Rd b/man/scale_gradient.Rd index 454b9a400f..78793514a7 100644 --- a/man/scale_gradient.Rd +++ b/man/scale_gradient.Rd @@ -71,7 +71,7 @@ each major break) \item A numeric vector of positions \item A function that given the limits returns a vector of minor breaks. }} - \item{n_breaks}{An integer guiding the number of major breaks. The algorithm + \item{n.breaks}{An integer guiding the number of major breaks. The algorithm may choose a slightly different number to ensure nice break labels. Will only have an effect if \code{breaks = waiver()}. Use \code{NULL} to use the default number of breaks given by the transformation.} diff --git a/man/scale_size.Rd b/man/scale_size.Rd index 8e27148630..21bd612dfc 100644 --- a/man/scale_size.Rd +++ b/man/scale_size.Rd @@ -86,8 +86,10 @@ transformation with \code{\link[scales:trans_new]{scales::trans_new()}}.} \item{guide}{A function used to create a guide or its name. See \code{\link[=guides]{guides()}} for more information.} -\item{n.breaks}{The number of break points to create if breaks are not given -directly.} +\item{n.breaks}{An integer guiding the number of major breaks. The algorithm +may choose a slightly different number to ensure nice break labels. Will +only have an effect if \code{breaks = waiver()}. Use \code{NULL} to use the default +number of breaks given by the transformation.} \item{nice.breaks}{Logical. Should breaks be attempted placed at nice values instead of exactly evenly spaced between the limits. If \code{TRUE} (default) @@ -118,7 +120,7 @@ each major break) \item A numeric vector of positions \item A function that given the limits returns a vector of minor breaks. }} - \item{n_breaks}{An integer guiding the number of major breaks. The algorithm + \item{n.breaks}{An integer guiding the number of major breaks. The algorithm may choose a slightly different number to ensure nice break labels. Will only have an effect if \code{breaks = waiver()}. Use \code{NULL} to use the default number of breaks given by the transformation.} From 29f50c81d9d1e17ea50127298244720bd1282cb8 Mon Sep 17 00:00:00 2001 From: Thomas Lin Pedersen Date: Tue, 1 Oct 2019 13:41:59 +0200 Subject: [PATCH 5/5] fix indentation --- R/scale-.r | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/scale-.r b/R/scale-.r index cb000aaa9c..d0305cf61b 100644 --- a/R/scale-.r +++ b/R/scale-.r @@ -932,9 +932,9 @@ ScaleBinned <- ggproto("ScaleBinned", Scale, breaks <- self$rescale(breaks, limits) x_binned <- cut(x, breaks, - labels = FALSE, - include.lowest = TRUE, - right = self$right + labels = FALSE, + include.lowest = TRUE, + right = self$right ) if (!is.null(self$palette.cache)) {