R/scales.R

Defines functions scale_y_rev_sci scale_x_rev_sci scale_y_log10_sci scale_x_log10_sci scale_y_sci scale_x_sci

#' @title Scientific scales
#' @rdname scales
#' @param name Axis name.
#' @param breaks Breaks.
#' @param minor_breaks Minor breaks.
#' @param labels Labels placed at large preaks.
#' @param limits Axis limits.
#' @param expand Whether to expand axis limits.
#' @param oob Handling of the "out of bounds" limits.
#' @param na.value Replacement for missing values.
#' @param position Position of the axis.
#' @param sec.axis Secondary axis descriptor.
#' @param breaks_n A weak parameter that controls number of autogenerated large breaks.
#' @param breaks_modifiers Break modifiers to be used for autogeneration.
#' @param minor_breaks_n A weak parameter that controls number of autogenerated small breaks.
#'
#' @return A \code{ggplot2} object
#' @export
scale_x_sci <- function(name = waiver(), breaks = waiver(), minor_breaks = waiver(),
    labels = waiver(), limits = NULL, expand = waiver(), oob = censor,
    na.value = NA_real_, position = "bottom",
    sec.axis = waiver(),
    breaks_n = 5,
    breaks_modifiers = vctrs::vec_c(1, 2, 2.5, 5),
    minor_breaks_n = 50L) {

    breaks_n <- vec_assert(vec_cast(breaks_n, integer()), size = 1L)
    breaks_modifiers <- vec_cast(breaks_modifiers, double())

    scale_x_continuous(name = name, breaks = breaks, minor_breaks = minor_breaks,
        labels = labels, limits = limits, expand = expand, oob = oob,
        na.value = na.value, trans = identity_sci_trans(breaks_n, breaks_modifiers, minor_breaks_n),
        position = position,
        sec.axis = sec.axis)
}

#' @rdname scales
#' @export
scale_y_sci <- function(name = waiver(), breaks = waiver(), minor_breaks = waiver(),
    labels = waiver(), limits = NULL, expand = waiver(), oob = censor,
    na.value = NA_real_, position = "left",
    sec.axis = waiver(),
    breaks_n = 5,
    breaks_modifiers = vctrs::vec_c(1, 2, 2.5, 5),
    minor_breaks_n = 50L) {

    breaks_n <- vec_assert(vec_cast(breaks_n, integer()), size = 1L)
    breaks_modifiers <- vec_cast(breaks_modifiers, double())

    scale_y_continuous(name = name, breaks = breaks, minor_breaks = minor_breaks,
        labels = labels, limits = limits, expand = expand, oob = oob,
        na.value = na.value, trans = identity_sci_trans(breaks_n, breaks_modifiers, minor_breaks_n),
        position = position,
        sec.axis = sec.axis)
}

#' @rdname scales
#' @export
scale_x_log10_sci <- function(name = waiver(), breaks = waiver(), minor_breaks = waiver(),
    labels = waiver(), limits = NULL, expand = waiver(), oob = censor,
    na.value = NA_real_, position = "bottom",
    breaks_n = 5,
    minor_breaks_n = 30L,
    sec.axis = waiver()) {

    scale_x_continuous(name = name, breaks = breaks, minor_breaks = minor_breaks,
        labels = labels, limits = limits, expand = expand, oob = oob,
        na.value = na.value,
        trans = log10_sci_trans(breaks_n, minor_breaks_n),
        position = position,
        sec.axis = sec.axis)
}
#' @rdname scales
#' @export
scale_y_log10_sci <- function(name = waiver(), breaks = waiver(), minor_breaks = waiver(),
    labels = waiver(), limits = NULL, expand = waiver(), oob = censor,
    na.value = NA_real_, position = "left",
    breaks_n = 5,
    minor_breaks_n = 30L,
    sec.axis = waiver()) {

    scale_y_continuous(name = name, breaks = breaks, minor_breaks = minor_breaks,
        labels = labels, limits = limits, expand = expand, oob = oob,
        na.value = na.value,
        trans = log10_sci_trans(breaks_n, minor_breaks_n),
        position = position,
        sec.axis = sec.axis)
}

#' @rdname scales
#' @export
scale_x_rev_sci <- function(
    name = waiver(), breaks = waiver(), minor_breaks = waiver(),
    labels = waiver(), limits = NULL, expand = waiver(), oob = censor,
    na.value = NA_real_, position = "bottom",
    sec.axis = waiver(),
    breaks_n = 5,
    breaks_modifiers = vctrs::vec_c(1, 2, 2.5, 5),
    minor_breaks_n = 50L) {

    breaks_n <- vec_assert(vec_cast(breaks_n, integer()), size = 1L)
    breaks_modifiers <- vec_cast(breaks_modifiers, double())

    scale_x_continuous(name = name, breaks = breaks, minor_breaks = minor_breaks,
        labels = labels, limits = limits, expand = expand, oob = oob,
        na.value = na.value, trans = reverse_sci_trans(breaks_n, breaks_modifiers, minor_breaks_n),
        position = position,
        sec.axis = sec.axis)
}

#' @rdname scales
#' @export
scale_y_rev_sci <- function(
    name = waiver(), breaks = waiver(), minor_breaks = waiver(),
    labels = waiver(), limits = NULL, expand = waiver(), oob = censor,
    na.value = NA_real_, position = "left",
    sec.axis = waiver(),
    breaks_n = 5,
    breaks_modifiers = vctrs::vec_c(1, 2, 2.5, 5),
    minor_breaks_n = 50L) {

    breaks_n <- vec_assert(vec_cast(breaks_n, integer()), size = 1L)
    breaks_modifiers <- vec_cast(breaks_modifiers, double())

    scale_y_continuous(name = name, breaks = breaks, minor_breaks = minor_breaks,
        labels = labels, limits = limits, expand = expand, oob = oob,
        na.value = na.value, trans = reverse_sci_trans(breaks_n, breaks_modifiers, minor_breaks_n),
        position = position,
        sec.axis = sec.axis)
}
Ilia-Kosenkov/sciplotr documentation built on June 7, 2022, 8:01 a.m.