R/pal-ebvm.R

Defines functions scale_fill_ebvmCont scale_color_ebvmCont scale_fill_ebvmDisc scale_color_ebvmDisc ebvm_pal pal_name

Documented in scale_color_ebvmCont scale_color_ebvmDisc scale_fill_ebvmCont scale_fill_ebvmDisc

#' Scale functions for using ebvmThemes in ggplot2
#'
#' @note
#' Functions adapted from ggplot2 scale_fill_distiller and scale_fill_brewer
#'
#' @details
#' Continuous scale
#' Discrete
#'#'
#' @inheritParams scales::gradient_n_pal
#' @param ... Other arguments passed on to [discrete_scale()] or, for
#'   `distiller` scales, [continuous_scale()] to control name,
#'   limits, breaks, labels and so forth.
#' @family colour scales
#' @rdname scale_ebvm
#' @export
scale_fill_ebvmCont <- function(..., type = 'seq',
                           palette = 1, direction = -1,
                           values = NULL, space = "Lab",
                           na.value = 'grey66', guide = "colourbar"){
  require(ggplot2)
  require(scales)
  type <- match.arg(type, c("seq", "div", "qual"))
  if (type == "qual") {
    warning("Using a discrete colour palette in a continuous scale.\n  Consider using type = \"seq\" or type = \"div\" instead", call. = FALSE)
  }
  continuous_scale("fill", "eeb",
                   gradient_n_pal(ebvm_pal(type, palette, direction)(6), values, space),
                   na.value = na.value, guide = guide, ...)
}

#' @rdname scale_ebvm
#' @export
scale_color_ebvmCont <- function(..., type = 'seq',
                            palette = 1, direction = -1,
                            values = NULL, space = "Lab",
                            na.value = 'grey66', guide = "colourbar"){
  require(ggplot2)
  require(scales)
  type <- match.arg(type, c("seq", "div", "qual"))
  if (type == "qual") {
    warning("Using a discrete colour palette in a continuous scale.\n  Consider using type = \"seq\" or type = \"div\" instead", call. = FALSE)
  }
  continuous_scale("color", "eeb",
                   gradient_n_pal(ebvm_pal(type, palette, direction)(6), values, space),
                   na.value = na.value, guide = guide, ...)
}

#' @rdname scale_ebvm
#' @export
scale_fill_ebvmDisc <- function(...,type = 'div', palette = 1, direction = 1){
  require(ggplot2)
  require(scales)
  discrete_scale("fill", "ebvm", ebvm_pal(type,palette,direction), ...)
}

#' @rdname scale_ebvm
#' @export
scale_color_ebvmDisc <- function(...,type = 'div', palette = 1, direction = 1){
  require(ggplot2)
  require(scales)
  discrete_scale("color", "ebvm", ebvm_pal(type,palette,direction), ...)
}

ebvm_pal <- function(type = "div", palette = 1, direction = 1) {
  pal <- pal_name(palette, type)

  function(n) {
    # If <3 colors are requested, ebvm.pal will return a 3-color palette and
    # give a warning. This warning isn't useful, so suppress it.
    # If the palette has k colors and >k colors are requested, brewer.pal will
    # return a k-color palette and give a warning. This warning is useful, so
    # don't suppress it.
    if (n < 3) {
      pal <- suppressWarnings(ebvm.pal(n, pal))
    } else {
      pal <- ebvm.pal(n, pal)
    }
    # In both cases ensure we have n items
    pal <- pal[seq_len(n)]

    if (direction == -1)
      pal <- rev(pal)

    pal
  }
}

pal_name <- function(palette, type) {
  if (is.character(palette)) {
    if (!palette %in% unlist(ebvm)) {
      warning("Unknown palette ", palette)
      palette <- "Ordem"
    }
    return(palette)
  }

  type <- match.arg(type, c("div", "qual", "seq"))
  ebvm[[type]][palette]
}

ebvm <- list(
  div = c("Ordem")
)
ebvm24/elisalib documentation built on May 28, 2019, 7:55 p.m.