# [R] Discrete values in levelplot?

David Winsemius dwinsemius at comcast.net
Sat Mar 27 16:04:07 CET 2010

```On Mar 26, 2010, at 11:08 AM, Filipe Cadete wrote:

> Dear all,
>
> I am trying represent a matrix of discrete values. At the moment I
> am using levelplot from the lattice package, but it seems to only
> work with numerical values. Is there an option in levelplot that
> will allow me to assign a color to a discrete value, or another
> package that will do the same?
>
> To clarify, with levelplot I can represent a matrix such as:
>     [,1] [,2] [,3] [,4]
> [1,] "1"  "1"  "1"  "1"
> [2,] "1"  "5"  "5"  "2"
> [3,] "1"  "3"  "3"  "3"
>
> Which when plotted will have colors assigned based on a continuous
> scale of values (from 1 to 5 in this case).
>
> What I am looking for is a way to represent a matrix of the type:
>
>     [,1] [,2] [,3] [,4]
> [1,] "A"  "B"  "C"  "D"
> [2,] "A"  "E"  "D"  "A"
> [3,] "B"  "C"  "C"  "C"
>
> where each letter would have a specific color assigned to it.

This would be one way to convert letters to R color names:

cmtx <-matrix(sample(LETTERS[1:8], 25, TRUE), ncol=5)
Vswitch <-Vectorize(switch)
Vswitch(EXPR=cmtx, A="red", B="yellow", C="orange", D="brown",
E="blue", F="green", G="pink", H="light red")

But that did not provide a clear path to success with either
levelplot() or image():

> image(1:5, 1:5, matrix(Vswitch(EXPR=cmtx, A=1, B=2, C=3, D=4, E=5,
F=6, G=7, H=8), ncol=5)  )

# worked

> cmtx
[,1] [,2] [,3] [,4] [,5]
[1,] "E"  "H"  "C"  "F"  "G"
[2,] "D"  "F"  "H"  "B"  "F"
[3,] "B"  "B"  "G"  "C"  "H"
[4,] "H"  "H"  "B"  "D"  "C"
[5,] "E"  "F"  "G"  "A"  "B"

> ??ascii
> require(R.oo); charToInt(cmtx)
R.methodsS3 v1.0.3 (2008-07-02) successfully loaded. See ?R.methodsS3
for help.
R.oo v1.6.5 (2009-10-30) successfully loaded. See ?R.oo for help.
 69 68 66 72 69 72 70 66 72 70 67 72 71 66 71 70 66 67 68 65 71
70 72 67 66
# wrong "scale" for colors in R
>  charToInt(cmtx)-charToInt("A") +1   # avoid "zero colors"
 5 4 2 8 5 8 6 2 8 6 3 8 7 2 7 6 2 3 4 1 7 6 8 3 2

>  image(matrix(charToInt(cmtx)-charToInt("A") +1, ncol=5)  )

Same result as above.

--
David Winsemius, MD
West Hartford, CT

```