R/ClimPalette.R

Defines functions ClimColors ClimPalette

Documented in ClimColors ClimPalette

#' Generate Climate Color Palettes
#' 
#' Generates a colorblind friendly color palette with color ranges useful in 
#' climate temperature variable plotting.
#' 
#' @param palette A character string of palette. The current choices:
#'   \itemize{
#'     \item{'bluered': from blue through white to red.} 
#'     \item{'redblue': from red through white to blue.}
#'     \item{'yellowred': from yellow through orange to red.}
#'     \item{'redyellow': from red through orange to yellow.}
#'     \item{'purpleorange': from purple through white to orange.}
#'     \item{'orangepurple': from orange through white to purple.}
#'   }
#' @param n A number indicating how many colors to generate.
#' 
#' @return
#' ClimPalette() returns the function that generates the color palette and the 
#' attribute 'na_color'.\cr
#' ClimColors() returns a vector of the colors.
#' 
#' @examples
#' lims <- seq(-1, 1, length.out = 21)
#' cb <- ColorBarContinuous(lims, color_fun = ClimPalette('redyellow'), plot = FALSE)
#' 
#' cols <- ClimColors(20)
#' cb <- ColorBarContinuous(lims, cols, plot = FALSE)
#' 
#' @importFrom grDevices colorRampPalette
#' @export
ClimPalette <- function(palette = "bluered") {
  if (palette == "bluered") {
    colorbar <- colorRampPalette(rev(c("#67001f", "#b2182b", "#d6604d",
                                       "#f4a582", "#fddbc7", "#f7f7f7", 
                                       "#d1e5f0", "#92c5de", "#4393c3", 
                                       "#2166ac", "#053061")))
    attr(colorbar, 'na_color') <- 'pink'
  } else if (palette == "redblue") {
    colorbar <- colorRampPalette(c("#67001f", "#b2182b", "#d6604d",
                                   "#f4a582", "#fddbc7", "#f7f7f7", 
                                   "#d1e5f0", "#92c5de", "#4393c3", 
                                   "#2166ac", "#053061"))
    attr(colorbar, 'na_color') <- 'pink'
  } else if (palette == "yellowred") {
    colorbar <- colorRampPalette(c("#ffffcc", "#ffeda0", "#fed976",
                                   "#feb24c", "#fd8d3c", "#fc4e2a",
                                   "#e31a1c", "#bd0026", "#800026"))
    attr(colorbar, 'na_color') <- 'pink'
  } else if (palette == "redyellow") {
    colorbar <- colorRampPalette(rev(c("#ffffcc", "#ffeda0", "#fed976",
                                       "#feb24c", "#fd8d3c", "#fc4e2a",
                                       "#e31a1c", "#bd0026", "#800026")))
    attr(colorbar, 'na_color') <- 'pink'
  } else if (palette == "purpleorange") {
    colorbar <- colorRampPalette(c("#2d004b", "#542789", "#8073ac",
				   "#b2abd2", "#d8daeb", "#f7f7f7",
				   "#fee0b6", "#fdb863", "#e08214", 
				   "#b35806", "#7f3b08"))
    attr(colorbar, 'na_color') <- 'pink'
  } else if (palette == "orangepurple") {
    colorbar <- colorRampPalette(rev(c("#2d004b", "#542789", "#8073ac",
				       "#b2abd2", "#d8daeb", "#f7f7f7",
				       "#fee0b6", "#fdb863", "#e08214",
				       "#b35806", "#7f3b08")))
    attr(colorbar, 'na_color') <- 'pink'
  } else {
    stop("Parameter 'palette' must be one of 'bluered', 'redblue', 'yellowred'",
	 "'redyellow', 'purpleorange' or 'orangepurple'.")
  }
  colorbar
}

#'@rdname ClimPalette
#'@export
ClimColors <- function(n, palette = "bluered") {
  ClimPalette(palette)(n)
}

Try the esviz package in your browser

Any scripts or data that you put into this service are public.

esviz documentation built on Feb. 4, 2026, 5:13 p.m.