Color interpolation

These functions return functions that interpolate a set of given colors to create new color palettes (like topo.colors) and color ramps, functions that map the interval \([0, 1]\) to colors (like grey).

colorRamp(colors, bias = 1, space = c("rgb", "Lab"),
          interpolate = c("linear", "spline"), alpha = FALSE)
colorRampPalette(colors, …)

colors to interpolate; must be a valid argument to col2rgb().


a positive number. Higher values give more widely spaced colors at the high end.


a character string; interpolation in RGB or CIE Lab color spaces.


use spline or linear interpolation.


logical: should alpha channel (opacity) values be returned? It is an error to give a true value if space is specified.

arguments to pass to colorRamp.


The CIE Lab color space is approximately perceptually uniform, and so gives smoother and more uniform color ramps. On the other hand, palettes that vary from one hue to another via white may have a more symmetrical appearance in RGB space.

The conversion formulas in this function do not appear to be completely accurate and the color ramp may not reach the extreme values in Lab space. Future changes in the R color model may change the colors produced with space = "Lab".


colorRamp returns a function with argument a vector of values between 0 and 1 that are mapped to a numeric matrix of RGB color values with one row per color and 3 or 4 columns.

colorRampPalette returns a function that takes an integer argument (the required number of colors) and returns a character vector of colors (see rgb) interpolating the given sequence (similar to heat.colors or terrain.colors).

See Also

Good starting points for interpolation are the “sequential” and “diverging” ColorBrewer palettes in the RColorBrewer package.

splinefun or approxfun are used for interpolation.

  • colorRamp
  • colorRampPalette
library(grDevices) # NOT RUN { ## Both return a *function* : colorRamp(c("red", "green"))( (0:4)/4 ) ## (x) , x in [0,1] colorRampPalette(c("blue", "red"))( 4 ) ## (n) ## a ramp in opacity of blue values colorRampPalette(c(rgb(0,0,1,1), rgb(0,0,1,0)), alpha = TRUE)(8) require(graphics) ## Here space="rgb" gives palettes that vary only in saturation, ## as intended. ## With space="Lab" the steps are more uniform, but the hues ## are slightly purple. filled.contour(volcano, color.palette = colorRampPalette(c("red", "white", "blue")), asp = 1) filled.contour(volcano, color.palette = colorRampPalette(c("red", "white", "blue"), space = "Lab"), asp = 1) ## Interpolating a 'sequential' ColorBrewer palette YlOrBr <- c("#FFFFD4", "#FED98E", "#FE9929", "#D95F0E", "#993404") filled.contour(volcano, color.palette = colorRampPalette(YlOrBr, space = "Lab"), asp = 1) filled.contour(volcano, color.palette = colorRampPalette(YlOrBr, space = "Lab", bias = 0.5), asp = 1) ## 'jet.colors' is "as in Matlab" ## (and hurting the eyes by over-saturation) jet.colors <- colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan", "#7FFF7F", "yellow", "#FF7F00", "red", "#7F0000")) filled.contour(volcano, color = jet.colors, asp = 1) ## space="Lab" helps when colors don't form a natural sequence m <- outer(1:20,1:20,function(x,y) sin(sqrt(x*y)/3)) rgb.palette <- colorRampPalette(c("red", "orange", "blue"), space = "rgb") Lab.palette <- colorRampPalette(c("red", "orange", "blue"), space = "Lab") filled.contour(m, col = rgb.palette(20)) filled.contour(m, col = Lab.palette(20)) # }
Documentation reproduced from package grDevices, version 3.6.2, License: Part of R 3.6.2

Community examples at Nov 15, 2018 grDevices v3.5.1

Example code for [LinkedIn Learning course]( ```r colors() # returns a vector of color names. colors()[1:3] # colorRamp is more useful # returns a function that returns ONE color based on input mycolors <- colorRamp(c(colors()[1:10])) mycolors(.3) # argument between 0 and 1 hist(ChickWeight$weight, col = mycolors(.5)) # curious - why three colors? Because these are the RGB values. # equivalent to... hist(ChickWeight$weight, col = c(221.5, 207.5, 190)) # one way to get multiple values from colorramp mycolors(c(.1,.3,.9)) hist(ChickWeight$weight, col = mycolors(c(.1,.3,.9))) # or... define with colorRampPalette... mycolorspal <- colorRampPalette(c(colors()[1:10])) mycolorspal(10) hist(ChickWeight$weight, col = mycolorspal(10)) ```