File: color.scale.R

package info (click to toggle)
r-cran-plotrix 2.9-3-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 960 kB
  • sloc: makefile: 3
file content (64 lines) | stat: -rw-r--r-- 1,998 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
color.scale<-function(x,redrange=c(0,1),greenrange=c(0,1),bluerange=c(0,1),
 extremes=NA,na.color=NA,xrange=NULL) {
 
 naxs<-is.na(x)
 if(!is.na(extremes[1])){
  # calculate the color ranges from the extremes
  colmat<-col2rgb(extremes)
  redrange<-colmat[1,]/255
  greenrange<-colmat[2,]/255
  bluerange<-colmat[3,]/255
 }
 ncolors<-length(x)
 if(is.null(xrange)) xrange<-range(x,na.rm=TRUE)
 else {
  if(xrange[1] > min(x,na.rm=TRUE) || xrange[2] < max(x,na.rm=TRUE))
   stop("An explicit range for x must include the range of x values.")
 }
 nreds<-length(redrange)
 if(nreds>1) {
  reds<-rep(redrange[nreds],ncolors)
  xstart<-xrange[1]
  xinc<-diff(xrange)/(nreds-1)
  for(seg in 1:(nreds-1)){
   segindex<-which((x >= xstart) & (x <= (xstart+xinc)))
   reds[segindex]<-rescale(x[segindex],redrange[c(seg,seg+1)])
   xstart<-xstart+xinc
  }
  if(min(reds) < 0 || max(reds) > 1) reds<-rescale(reds,c(0,1))
 }
 else reds<-rep(redrange,ncolors)
 ngreens<-length(greenrange)
 if(ngreens>1) {
  greens<-rep(greenrange[ngreens],ncolors)
  xstart<-xrange[1]
  xinc<-diff(xrange)/(ngreens-1)
  for(seg in 1:(ngreens-1)){
   segindex<-which((x >= xstart) & (x <= (xstart+xinc)))
   greens[segindex]<-rescale(x[segindex],greenrange[c(seg,seg+1)])
   xstart<-xstart+xinc
  }
  if(min(greens) < 0 || max(greens) > 1)
   greens<-rescale(greens,c(0,1))
 }
 else greens<-rep(greenrange,ncolors)
 nblues<-length(bluerange)
 if(length(bluerange)>1) {
  blues<-rep(bluerange[nblues],ncolors)
  xstart<-xrange[1]
  xinc<-diff(xrange)/(nblues-1)
  for(seg in 1:(nblues-1)){
   segindex<-which((x >= xstart) & (x <= (xstart+xinc)))
   blues[segindex]<-rescale(x[segindex],bluerange[c(seg,seg+1)])
   xstart<-xstart+xinc
  }
  if(min(blues) < 0 || max(blues) > 1)
  blues<-rescale(blues,c(0,1))
 }
 else blues<-rep(bluerange,ncolors)
 xdim<-dim(x)
 if(is.null(xdim)) colors<-rgb(reds,greens,blues)
 else colors<-matrix(rgb(reds,greens,blues),nrow=xdim[1])
 if(length(naxs)) colors[naxs]<-na.color
 return(colors)
}