Message-ID: <Pine.A41.4.44.0211231034450.96242-100000@homer01.u.washington.edu>
Date: 2002-11-23T18:43:48Z
From: Thomas Lumley
Subject: Small change to plot.xy
In-Reply-To: <3DDF4568.63CB31D1@durham.ac.uk>
On Sat, 23 Nov 2002, Jonathan Rougier wrote:
> OK -- so there are two objections to the proposal:
>
> 1) The factor might be a colour specifier
>
The function below might help
It checks:
- are the levels colour names
- are they numbers
- are they color specifiers like #a0f3d2
otherwise it returns the underlying codes with unclass().
On the issue of whether the current default palettes are ideal I can quote
Paul Murrell's talk at the JSM ("The only word for this is
`embarrassing'"). Improved palettes are planned, and one step in that
direction is the RColorBrewer package, which supplies color schemes
useful for images, maps and barplots.
-thomas
factor2color<-function(color){
nms<-as.character(color)
n<-length(nms)
## are they color names
is.color<-nms %in% colors()
if (all(is.color)) return(nms)
if (sum(is.color)>2 && mean(is.color)>2/3)
warning("Not all factor names are colors")
## are they numbers
m<-length(grep("[^:digit:]",nms))
if (m==0 && all(!is.na(nums<-as.numeric(nms))))
return(nums)
## are they #a0bfe4
n<-length(nms)
m<-length(grep("#[0-9A-Fa-f]{6,6}",nms))
if(m==n)
return(nms)
## otherwise just return numbers
return(unclass(color))
}