Re: [R] color palette for points, lines, text / interactive Rcolorpicker?

2010-01-29 Thread Philippe Grosjean

If you use tcltk package package, you can do:

 as.character(.Tcl(tk_chooseColor))

Best,

Philippe


Greg Snow wrote:

I don't know of any existing palettes that meet your conditions, but here are a 
couple of options for interactive exploration of colorsets (this is quick and 
dirty, there are probably some better orderings, base colors, etc.):

colpicker - function( cols=colors() ) {
n - length(cols)
nr - ceiling(sqrt(n))
nc - ceiling( n/nr )

imat - matrix(c(seq_along(cols), rep(NA, nr*nc-n) ),
ncol=nc, nrow=nr)

image( seq.int(nr),seq.int(nc), imat, col=cols, xlab='', ylab='' )
xy - locator()

cols[ imat[ cbind( round(xy$x), round(xy$y) ) ] ]
}

colpicker()


## another approach

library(TeachingDemos)

cols - colors()
n - length(cols)
par(xpd=TRUE)

# next line only works on windows
HWidentify( (1:n) %% 26, (1:n) %/% 26, label=cols, col=cols, pch=15, cex=2 )

# next line works on all platforms with tcltk
HTKidentify( (1:n) %% 26, (1:n) %/% 26, label=cols, col=cols, pch=15, cex=2 )


# reorder
cols.rgb - col2rgb( cols )
d - dist(t(cols.rgb))
clst - hclust(d)

colpicker(cols[clst$order])
HWidentify( (1:n) %% 26, (1:n) %/% 26, label=cols[clst$order], 
col=cols[clst$order], pch=15, cex=2 )
## or HTKidentify

cols.hsv - rgb2hsv( cols.rgb )
d2 - dist(t(cols.hsv))
clst2 - hclust(d2)

HWidentify( (1:n) %% 26, (1:n) %/% 26, label=cols[clst2$order], 
col=cols[clst2$order], pch=15, cex=2 )
## or HTKidentify

Hope this helps,




__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] color palette for points, lines, text / interactive Rcolorpicker?

2010-01-29 Thread Michael Friendly
Below is a 'pretty-poor' version of a color picker I wrote using the 
code on the color chart page I cited.  It's slightly 'pretty' in terms 
of layout, but 'poor' in terms of usability and flexibility.  Still,

it is more useful to me than the nearly-null set of alternatives
I have found in R. Maybe someone else can do better.
[Some lines below have been broken by my mail client.]

# Using code from http://research.stowers-institute.org/efg/R/Color/Chart/

colorpicker - function(n, order=c(index, hue), cols=colors(), 
value=c(name, index)) {
##  n:  max number of colors to pick (default: as many are selected in 
identify)

##  order: how to order the colors in cols
##  cols: vector of colors
##  value: return color names or indices in cols?


  SetTextContrastColor - function(color)
  {
ifelse( mean(col2rgb(color))  127, black, white)
  }

  # Define this array of text contrast colors that corresponds to each
  # member of the colors() array.
  TextContrastColor - unlist( lapply(cols, SetTextContrastColor) )

ncolors - length(cols)
if (missing(n)) n - ncolors

# store coordinates of centers
x - vector(integer, length=0)
y - vector(integer, length=0)
ind - vector(integer, length=0)

nr - ceiling(sqrt(ncolors))
nc - ceiling( ncolors/nr )

order - match.arg(order)
value - match.arg(value)

if (order==index) {
# 1a. Plot matrix of R colors, in index order, nc per row.
# This example plots each row of rectangles one at a time.

plot( c(1,nc), c(0,nr), type=n, ylab=, xlab=,
  axes=FALSE, ylim=c(nr,0))
title(R colors (index order): LT click to select; RT click to end)

for (j in 0:(nr-1))
{
  base - j*nc
  remaining - length(cols) - base
  RowSize - ifelse(remaining  nc, remaining, nc)
  x - c(x, 1:RowSize)
  y - c(y, rep(j, RowSize))
  ind - c(ind, base + (1:RowSize))
  rect((1:RowSize)-0.5,j-0.5, (1:RowSize)+0.5,j+0.5,
border=black,
col=cols[base + (1:RowSize)])
  text((1:RowSize), j, paste(base + (1:RowSize)), cex=0.7,
col=TextContrastColor[base + (1:RowSize)])
}
  }
  else  ## if (order==hue)
  {

# 1b. Plot matrix of R colors, in hue order, nc per row.
# This example plots each rectangle one at a time.
RGBColors - col2rgb(cols[1:length(cols)])
HSVColors - rgb2hsv( RGBColors[1,], RGBColors[2,], RGBColors[3,],
 maxColorValue=255)
HueOrder - order( HSVColors[1,], HSVColors[2,], HSVColors[3,] )

plot(0, type=n, ylab=, xlab=,
  axes=FALSE, ylim=c(nr,0), xlim=c(1,nc))
title(R colors (HSV order): LT click to select; RT click to end)

for (j in 0:(nr-1))
{
  for (i in 1:nc)
  {
   k - j*nc + i
   if (k = length(cols))
   {
x - c(x, i)
y - c(y, j)
ind - c(ind, HueOrder[k] )
rect(i-0.5,j-0.5, i+0.5,j+0.5, border=black, col=cols[ 
HueOrder[k] ])
text(i,j, paste(HueOrder[k]), cex=0.7, col=TextContrastColor[ 
HueOrder[k] ])

   }
  }
}
  }

  ## use identify to select n colors
result - identify(x, y, ind, n=n, offset=-1, pos=FALSE)
result - if (value==index) result else cols[result]
result
}

Greg Snow wrote:

I don't know of any existing palettes that meet your conditions, but here are a 
couple of options for interactive exploration of colorsets (this is quick and 
dirty, there are probably some better orderings, base colors, etc.):

colpicker - function( cols=colors() ) {
n - length(cols)
nr - ceiling(sqrt(n))
nc - ceiling( n/nr )

imat - matrix(c(seq_along(cols), rep(NA, nr*nc-n) ),
ncol=nc, nrow=nr)

image( seq.int(nr),seq.int(nc), imat, col=cols, xlab='', ylab='' )
xy - locator()

cols[ imat[ cbind( round(xy$x), round(xy$y) ) ] ]
}

colpicker()


## another approach

library(TeachingDemos)

cols - colors()
n - length(cols)
par(xpd=TRUE)

# next line only works on windows
HWidentify( (1:n) %% 26, (1:n) %/% 26, label=cols, col=cols, pch=15, cex=2 )

# next line works on all platforms with tcltk
HTKidentify( (1:n) %% 26, (1:n) %/% 26, label=cols, col=cols, pch=15, cex=2 )


# reorder
cols.rgb - col2rgb( cols )
d - dist(t(cols.rgb))
clst - hclust(d)

colpicker(cols[clst$order])
HWidentify( (1:n) %% 26, (1:n) %/% 26, label=cols[clst$order], 
col=cols[clst$order], pch=15, cex=2 )
## or HTKidentify

cols.hsv - rgb2hsv( cols.rgb )
d2 - dist(t(cols.hsv))
clst2 - hclust(d2)

HWidentify( (1:n) %% 26, (1:n) %/% 26, label=cols[clst2$order], 
col=cols[clst2$order], pch=15, cex=2 )
## or HTKidentify

Hope this helps,





--
Michael Friendly Email: friendly AT yorku DOT ca
Professor, Psychology Dept.
York University  Voice: 416 736-5115 x66249 Fax: 416 736-5814
4700 Keele Street

Re: [R] color palette for points, lines, text / interactive Rcolorpicker?

2010-01-29 Thread Eik Vettorazzi

Hi Michael,
have a look at colors.plot(T) from the epitools-package (and perhaps at 
colorbrewer.display() as well). Maybe this suits you?

hth

Michael Friendly schrieb:
I'm looking for a scheme to generate a default color palette for 
plotting points, lines and text (on a white or transparent background)

with from 2 to say 9 colors with the following constraints:
- red is reserved for another purpose
- colors should be highly distinct
- avoid light colors (like yellows)

In RColorBrewer, most of the schemes are designed for area fill rather 
than points and lines. The closest I can find

for these needs is the Dark2 palette, e.g.,

library(RColorBrewer)
display.brewer.pal(7,Dark2)

I'm wondering if there is something else I can use.

On a related note, I wonder if there is something like an interactive 
color picker for R.  For example,

http://research.stowers-institute.org/efg/R/Color/Chart/
displays several charts of all R colors.  I'd like to find something 
that displays such a chart and uses
identify() to select a set of tiles, whose colors() indices are 
returned by the function.


-Michael



__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


[R] color palette for points, lines, text / interactive Rcolorpicker?

2010-01-28 Thread Michael Friendly
I'm looking for a scheme to generate a default color palette for 
plotting points, lines and text (on a white or transparent background)

with from 2 to say 9 colors with the following constraints:
- red is reserved for another purpose
- colors should be highly distinct
- avoid light colors (like yellows)

In RColorBrewer, most of the schemes are designed for area fill rather 
than points and lines. The closest I can find

for these needs is the Dark2 palette, e.g.,

library(RColorBrewer)
display.brewer.pal(7,Dark2)

I'm wondering if there is something else I can use.

On a related note, I wonder if there is something like an interactive 
color picker for R.  For example,

http://research.stowers-institute.org/efg/R/Color/Chart/
displays several charts of all R colors.  I'd like to find something 
that displays such a chart and uses
identify() to select a set of tiles, whose colors() indices are returned 
by the function.


-Michael

--
Michael Friendly Email: friendly AT yorku DOT ca 
Professor, Psychology Dept.

York University  Voice: 416 736-5115 x66249 Fax: 416 736-5814
4700 Keele Streethttp://www.math.yorku.ca/SCS/friendly.html
Toronto, ONT  M3J 1P3 CANADA

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] color palette for points, lines, text / interactive Rcolorpicker?

2010-01-28 Thread Greg Snow
I don't know of any existing palettes that meet your conditions, but here are a 
couple of options for interactive exploration of colorsets (this is quick and 
dirty, there are probably some better orderings, base colors, etc.):

colpicker - function( cols=colors() ) {
n - length(cols)
nr - ceiling(sqrt(n))
nc - ceiling( n/nr )

imat - matrix(c(seq_along(cols), rep(NA, nr*nc-n) ),
ncol=nc, nrow=nr)

image( seq.int(nr),seq.int(nc), imat, col=cols, xlab='', ylab='' )
xy - locator()

cols[ imat[ cbind( round(xy$x), round(xy$y) ) ] ]
}

colpicker()


## another approach

library(TeachingDemos)

cols - colors()
n - length(cols)
par(xpd=TRUE)

# next line only works on windows
HWidentify( (1:n) %% 26, (1:n) %/% 26, label=cols, col=cols, pch=15, cex=2 )

# next line works on all platforms with tcltk
HTKidentify( (1:n) %% 26, (1:n) %/% 26, label=cols, col=cols, pch=15, cex=2 )


# reorder
cols.rgb - col2rgb( cols )
d - dist(t(cols.rgb))
clst - hclust(d)

colpicker(cols[clst$order])
HWidentify( (1:n) %% 26, (1:n) %/% 26, label=cols[clst$order], 
col=cols[clst$order], pch=15, cex=2 )
## or HTKidentify

cols.hsv - rgb2hsv( cols.rgb )
d2 - dist(t(cols.hsv))
clst2 - hclust(d2)

HWidentify( (1:n) %% 26, (1:n) %/% 26, label=cols[clst2$order], 
col=cols[clst2$order], pch=15, cex=2 )
## or HTKidentify

Hope this helps,


-- 
Gregory (Greg) L. Snow Ph.D.
Statistical Data Center
Intermountain Healthcare
greg.s...@imail.org
801.408.8111


 -Original Message-
 From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-
 project.org] On Behalf Of Michael Friendly
 Sent: Thursday, January 28, 2010 8:38 AM
 To: R-Help
 Subject: [R] color palette for points, lines, text / interactive
 Rcolorpicker?
 
 I'm looking for a scheme to generate a default color palette for
 plotting points, lines and text (on a white or transparent background)
 with from 2 to say 9 colors with the following constraints:
 - red is reserved for another purpose
 - colors should be highly distinct
 - avoid light colors (like yellows)
 
 In RColorBrewer, most of the schemes are designed for area fill rather
 than points and lines. The closest I can find
 for these needs is the Dark2 palette, e.g.,
 
 library(RColorBrewer)
 display.brewer.pal(7,Dark2)
 
 I'm wondering if there is something else I can use.
 
 On a related note, I wonder if there is something like an interactive
 color picker for R.  For example,
 http://research.stowers-institute.org/efg/R/Color/Chart/
 displays several charts of all R colors.  I'd like to find something
 that displays such a chart and uses
 identify() to select a set of tiles, whose colors() indices are
 returned
 by the function.
 
 -Michael
 
 --
 Michael Friendly Email: friendly AT yorku DOT ca
 Professor, Psychology Dept.
 York University  Voice: 416 736-5115 x66249 Fax: 416 736-5814
 4700 Keele Streethttp://www.math.yorku.ca/SCS/friendly.html
 Toronto, ONT  M3J 1P3 CANADA
 
 __
 R-help@r-project.org mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide http://www.R-project.org/posting-
 guide.html
 and provide commented, minimal, self-contained, reproducible code.

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.