Learn R Programming

fields (version 6.7.5)

tim.colors: Some useful color tables for images and tools to handle them.

Description

Several color scales useful for image plots: a pleasing rainbow style color table patterned after that used in Matlab by Tim Hoar and also some simple color interpolation schemes between two or more colors. There is also a function that converts between colors and a real valued vector.

Usage

tim.colors(n = 64, alpha=1.0)
larry.colors()
two.colors(n=256, start="darkgreen", end="red", middle="white", alpha=1.0)
designer.colors( n=256, col= c("darkgreen", "white", "darkred"),
                              x= seq(0,1,, length(col)) ,alpha=1.0)
color.scale( z, col=tim.colors(256), zlim =NULL, transparent.color="white",                     eps= 1e-8)

Arguments

Value

A vector giving the colors in a hexadecimal format, two extra hex digits are added for alpha channel.

Details

The color in R can be represented as three vectors in RGB coordinates and these coordinates are interpolated separately using a cubic spline to give color values that intermediate to the specified colors.

Ask Tim Hoar about tim.colors! He is a matlab black belt and this is his favorite scale in that system. two.colors is really about three different colors. For other colors try fields.color.picker to view possible choices. start="darkgreen", end="azure4" are the options used to get a nice color scale for rendering aerial photos of ski trails. (See http://www.image.ucar.edu/Data/MJProject.) larry.colors is a 13 color palette used by Larry McDaniel and is particularly useful for visualizing fields of climate variables.

designer.color is the master function for two.colors and tim.colors. It can be useful if one wants to customize the color table to match quantiles of a distribution. e.g. if the median of the data is at .3 with respect to the range then set x equal to c(0,.3,1) and specify three colors to provide a transtion that matches the median value. In fields language this function interpolates between a set of colors at locations x. While you can be creative about these colors just using another color scale as the basis is easy. For example

designer.color( 256, rainbow(4), x= c( 0,.2,.8,1.0))

leaves the choice of the colors to Dr. R after a thunderstorm.

See Also

topo.colors, terrain.colors, image.plot, quilt.plot, grey.scale, fields.color.picker

Examples

Run this code
tim.colors(10) 
# returns an array of 10 character strings encoding colors in hex format

# e.g. (red, green,  blue) values of   (16,255, 239)
#   translates to "#10FFEF" 
# rgb( 16/255, 255/255, 239/255, alpha=.5)
#   gives   "#10FFEF80"  note extra "alpha channel"

# veiw some color table choices
set.panel( 2,3)
z<- outer( 1:20,1:20, "+")
obj<- list( x=1:20,y=1:20,z=z )

image( obj, col=tim.colors( 200)) # 200 levels

image( obj, col=two.colors() )

# using tranparency without alpha the image plot would cover points
plot( 1:20,1:20)
image(obj, col=two.colors(alpha=.5), add=TRUE)

coltab<- designer.colors(col=c("blue", "grey", "green"),  x= c( 0,.3,1) ) 
image( obj, col= coltab )

# peg colors at some desired quantiles  of data.
# NOTE need 0 and 1 for the color scale to make sense
x<- quantile( c(z), c(0,.25,.5,.75,1.0) )
# scale these to [0,1]
zr<- range( c(z))
x<- (x-zr[1])/ (zr[2] - zr[1])  

coltab<- designer.colors(256,rainbow(5), x)
image( z, col= coltab ) # see image.plot for adding all kinds of legends

# colors now change at quantiles of data

# some random color values
set.seed(123)
z<- rnorm(100)
hex.codes<- color.scale(z, col=two.colors())
N<-length( hex.codes)
# take a look at the coded values
# or equivalently create some Xmas wrapping paper!
image( 1:N, N, matrix(1:N, N,1) , col=hex.codes, axes=FALSE, xlab="", ylab="")

set.panel()

Run the code above in your browser using DataLab