Re: [R] Color2D.matplot uniform color range

2011-12-19 Thread Jim Lemon

On 12/13/2011 02:15 AM, jalfaro wrote:

Hi Jim,
Thanks so much for your help. I have read several of your responses on this
mailing list and they have helped me out quite a bit as I have gotten more
and more used to R.

I am still a little confused here by your response.
I think you understood my requirements correctly.
In your words:
  I want to anchor the extremes of the scales regardless of the values in the
matrix.
  I want 1 color gradient for values between 0 and 1 with a lowerbound cutoff
at 0.5.
  I want a second color gradient for values between 1 and infinity with an
upper bound cutoff at 3.

The function now reads as follows:

make_Q_figure-function(filename,alias){
  h0- read.csv(file=filename,head=TRUE,sep=,,row.names=1)
  d =data.matrix(h0)
  cellcolors-matrix(NA,nrow=20,ncol=20)
  d- d[ind,ind]
  cellcolors[d= 1  d  3]- color.scale(c(1,3,d[d= 1  d  3]),
cs1=1,cs2=c(1,0),cs3=c(1,0))[-1:2]
  cellcolors[d1]-
color.scale(c(0,1,d[d1]),cs1=c(0,0,1),cs2=c(0,0,1),cs3=1)[-1:2]
  cellcolors[d= 2]-red

color2D.matplot(d,cellcolors=cellcolors,show.values=F,na.color=white,axes=FALSE,main=alias,
xlab=,ylab=)
  axis(1,at=0.5:19.5,labels=colnames(d))
  axis(2,at=0.5:19.5,labels=rev(rownames(d)))
}

However when I execute this function I get the following error:
Error in color.scale(c(0, 1, d[d  1]), cs1 = c(0, 0, 1), cs2 = c(0, 0,  :
   only 0's may be mixed with negative subscripts

Hi Jav,
My fault, the line should read:

color.scale(c(0,1,d[d1]),cs1=c(0,0,1),cs2=c(0,0,1),cs3=1)[-(1:2)]
 cellcolors[d= 2]-red

I always forget that the unary minus has precedence over the sequence 
operator.


Jim

__
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] Color2D.matplot uniform color range

2011-12-12 Thread Jim Lemon

On 12/12/2011 02:48 PM, jalfaro wrote:

Hi all.
I am having a problem using color2D.matplot
I am trying to visualize several different matrices under two color ranges.
One color range corresponds to values less than 1 and the second color range
for values greater than 1. However, the minimum value of each matrix differs
and is automatically set to have the smallest value in the color range.
Similarly, the maximum value of each matrix differs leading to non-uniform
color scales.

Below is the function that is causing me trouble. It is designed to take as
input 2  csv files with row and column headers describing a 20X20 matrix.
The goal would be to modify the code below as follows.
(1) if an entry is in range [0,1] the color scale should always be uniform
with the minimum color being 0.5 and the maximum color being 1.
(2) if an entry is in the range [1,infinity]  the color scale should have
minimum color value 1 and maximum color value 3. (I used infinity simply
because there is no way of knowing how high the value will be beforehand).

Any help would be greatly appreciated.

Thanks,
Jav

library(plotrix)
make_S_figure-function(filename,alias){
  h0- read.csv(file=filename,head=TRUE,sep=,,row.names=1)
  d =data.matrix(h0)
  m- 1:20
  cellcolors-matrix(NA,nrow=20,ncol=20)
  cellcolors2--matrix(NA,nrow=20,ncol=20)
  for(i in 1:length(m)){

  cellcolors[d= 1]-color.scale(d[d=1],cs1=c(1,1),cs2=c(1,0),cs3=c(1,0))
  cellcolors[d1]-color.scale(d[d1],cs1=c(0,1),cs2=c(0,1),cs3=c(1,1))

color2D.matplot(d,cellcolors=cellcolors,show.values=F,na.color=white,axes=FALSE,main=alias,
xlab=,ylab=)
  axis(1,at=0.5:19.5,labels=colnames(d))
  axis(2,at=0.5:19.5,labels=rev(rownames(d)))
  }



Hi jalfaro,
I'm not sure what you mean by a uniform color range, so I'll provide a 
couple of solutions. For your values between zero and one, the code 
above should go from blue (0) to white (1). If the minimum color means 
that anything from 0 to 0.5 should be blue and anything from 0.5 to 1 
should grade from blue to white, specify your colors like this:


# you don't need a loop for this
cellcolors[d1]-color.scale(d[d1],cs1=c(0,0,1),cs2=c(0,0,1),cs3=1)

The above will give you blue from 0 to 0.5, then scale to white at 1. 
What I think you want for the values of 1 and above is to scale from 
white to red between 1 and 3, then have red for all values above 3. So:


# you don't need a loop for this either
cellcolors[d = 1  d  3]-
 color.scale(d[d = 1  d  3],cs1=1,cs2=c(1,0),cs3=c(1,0))
# no point in calling color.scale
cellcolors[d = 3]-red

Now, rereading your message, I think that you want to anchor the 
extremes of the scales regardless of the values in the matrix. If so, 
try this:


# add the extreme values, then drop the resulting extreme colors
# in the assignment to the color matrix
cellcolors[d1]-
 color.scale(c(0,1,d[d1]),cs1=c(0,0,1),cs2=c(0,0,1),cs3=1)[1:2]
# same trick here, add the extremes, then drop them
cellcolors[d = 1  d  3]-
 color.scale(c(1,3,d[d = 1  d  3]),
 cs1=1,cs2=c(1,0),cs3=c(1,0))[-1:2]
# and fill in everything greater than 3
cellcolors[d = 3]-red

Let me know if you have any problems.

Jim

__
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] Color2D.matplot uniform color range

2011-12-12 Thread Jim Lemon

Hi jalfaro,
Apologies for the typo in the last message, the first two lines in the 
second example should read:


cellcolors[d1]-
 color.scale(c(0,1,d[d1]),cs1=c(0,0,1),cs2=c(0,0,1),cs3=1)[-1:2]

That is, minus the first two values returned.

Jim

__
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] Color2D.matplot uniform color range

2011-12-12 Thread jalfaro
Hi Jim, 
Thanks so much for your help. I have read several of your responses on this
mailing list and they have helped me out quite a bit as I have gotten more
and more used to R. 

I am still a little confused here by your response. 
I think you understood my requirements correctly. 
In your words:
 I want to anchor the extremes of the scales regardless of the values in the
matrix.
 I want 1 color gradient for values between 0 and 1 with a lowerbound cutoff
at 0.5.
 I want a second color gradient for values between 1 and infinity with an
upper bound cutoff at 3. 

The function now reads as follows: 

make_Q_figure-function(filename,alias){
 h0  - read.csv(file=filename,head=TRUE,sep=,,row.names=1)
 d =data.matrix(h0)
 cellcolors-matrix(NA,nrow=20,ncol=20)
 d - d[ind,ind]
 cellcolors[d = 1  d  3]- color.scale(c(1,3,d[d = 1  d  3]),
cs1=1,cs2=c(1,0),cs3=c(1,0))[-1:2]
 cellcolors[d1]- 
color.scale(c(0,1,d[d1]),cs1=c(0,0,1),cs2=c(0,0,1),cs3=1)[-1:2]
 cellcolors[d = 2]-red

color2D.matplot(d,cellcolors=cellcolors,show.values=F,na.color=white,axes=FALSE,main=alias,
xlab=,ylab=)
 axis(1,at=0.5:19.5,labels=colnames(d))
 axis(2,at=0.5:19.5,labels=rev(rownames(d)))
}

However when I execute this function I get the following error: 
Error in color.scale(c(0, 1, d[d  1]), cs1 = c(0, 0, 1), cs2 = c(0, 0,  :
  only 0's may be mixed with negative subscripts

An example input csv file is: 

aa,A,R,N,D,C,Q,E,G,H,I,L,K,M,F,P,S,T,W,Y,V
A,1.1140,0.9914,0.9706,0.8975,1.0217,1.0151,0.9699,1.0449,1.0126,0.9413,0.9421,0.9766,1.0411,0.9941,0.9243,1.0839,1.1340,0.9732,1.0073,1.0044
R,1.0339,1.0072,0.9642,0.8936,0.9424,0.9915,0.9497,0.9779,0.9896,0.8998,0.9120,0.9646,1.0300,0.9165,0.8856,1.0652,1.0880,0.9213,0.9342,0.9397
N,1.0469,0.9763,1.0613,0.9658,0.9817,0.9640,0.9389,1.0283,1.0294,0.9500,0.9556,0.9869,1.0569,0.9745,0.8287,1.0937,1.0944,0.9701,0.9641,0.9884
D,1.1241,1.0373,1.0358,1.0939,1.0107,1.0260,0.9840,1.0536,1.0727,0.9664,0.9869,1.0481,1.0917,0.9881,0.8351,1.1279,1.1123,0.9908,1.0066,1.0002
C,1.1007,1.0999,1.1280,1.0687,1.1967,1.0964,1.0631,1.1275,1.1668,1.0799,1.0139,1.1009,1.1200,1.0839,0.9009,1.2096,1.2340,1.0837,1.0998,1.1335
Q,1.0078,0.9555,0.9715,0.8813,0.9310,1.0032,0.9339,0.9630,0.9888,0.8811,0.8916,0.9519,0.9993,0.9103,0.8907,1.0625,1.0831,0.9088,0.9300,0.9307
E,1.0494,0.9865,0.9888,0.9247,0.9567,1.0004,1.0270,0.9890,1.0097,0.9088,0.9178,0.9850,1.0252,0.9212,0.8782,1.0737,1.0774,0.9312,0.9447,0.9420
G,0.9900,0.9683,0.9508,0.9162,0.9446,0.9667,0.9472,1.0452,0.9802,0.9247,0.9090,0.9654,0.9940,0.9374,0.8313,1.0343,1.0438,0.9344,0.9401,0.9566
H,1.0022,0.9459,0.9861,0.9343,0.9768,0.9539,0.9241,0.9879,1.0092,0.9259,0.9188,0.9654,1.0090,0.9431,0.8232,1.0544,1.0691,0.9491,0.9503,0.9638
I,1.1463,1.0799,1.0597,1.0151,1.0423,1.0985,1.0570,1.0798,1.0935,1.1005,1.0237,1.0886,1.1383,1.0321,0.8786,1.1389,1.1474,1.0277,1.0343,1.0586
L,1.1444,1.0699,1.0298,0.9750,1.0644,1.0824,1.0402,1.0620,1.0632,1.0042,1.1011,1.0647,1.1253,1.0344,0.9406,1.1156,1.1558,1.0184,1.0373,1.0522
K,1.0350,0.9731,0.9734,0.8856,0.9367,0.9806,0.9329,0.9691,0.9766,0.8962,0.9017,1.0117,1.0164,0.9055,0.8749,1.0328,1.0741,0.9186,0.9302,0.9368
M,1.0612,0.9880,0.9691,0.8914,1.0045,1.0106,0.9690,0.9982,1.0007,0.9349,0.9354,0.9917,1.0036,0.9645,0.9135,1.0471,1.1036,0.9514,0.9740,0.9891
F,1.0519,1.0216,1.0005,0.9571,1.0007,1.0317,0.9909,1.0316,1.0331,0.9821,0.9543,1.0234,1.0531,1.0339,0.8453,1.0861,1.0924,0.9854,0.9858,1.0067
P,0.9846,0.9434,1.0646,1.0543,1.1314,0.9283,0.9357,0.9992,1.0420,0.9883,0.9021,0.9587,0.9830,1.0039,1.0833,1.1387,1.1995,0.9996,1.0210,1.0942
S,0.9851,0.9363,0.9945,0.9485,0.9796,0.9339,0.9174,0.9884,1.0167,0.9337,0.9257,0.9559,1.0246,0.9555,0.8253,1.0447,1.0810,0.9563,0.9570,0.9705
T,0.9587,0.9272,0.9929,0.9602,0.9720,0.9393,0.9115,0.9778,1.0061,0.9354,0.8981,0.9410,0.9701,0.9597,0.7789,1.0650,1.0307,0.9527,0.9650,0.9840
W,1.0231,1.0003,0.9884,0.9447,0.9893,1.0085,0.9943,1.0159,1.0221,0.9541,0.9519,1.0093,1.0434,0.9722,0.8250,1.0622,1.0816,1.0213,0.9804,0.9858
Y,1.0189,1.0075,1.0157,0.9667,1.0037,1.0136,0.9807,1.0238,1.0340,0.9744,0.9282,0.9984,1.0230,0.9903,0.8184,1.0894,1.0973,0.9789,1.0340,1.0086
V,1.0992,1.0823,1.0724,1.0346,1.0629,1.0855,1.0544,1.0968,1.0998,1.0226,0.9972,1.0936,1.1162,1.0423,0.8329,1.1742,1.1807,1.0351,1.0512,1.1072



I'm not seeing the problem here. 

Thanks so much Jim. 
Jav



--
View this message in context: 
http://r.789695.n4.nabble.com/Color2D-matplot-uniform-color-range-tp4184701p4186339.html
Sent from the R help mailing list archive at Nabble.com.

__
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] Color2D.matplot uniform color range

2011-12-11 Thread jalfaro
Hi all.
I am having a problem using color2D.matplot
I am trying to visualize several different matrices under two color ranges.
One color range corresponds to values less than 1 and the second color range
for values greater than 1. However, the minimum value of each matrix differs
and is automatically set to have the smallest value in the color range.
Similarly, the maximum value of each matrix differs leading to non-uniform
color scales. 

Below is the function that is causing me trouble. It is designed to take as
input 2  csv files with row and column headers describing a 20X20 matrix.
The goal would be to modify the code below as follows.
(1) if an entry is in range [0,1] the color scale should always be uniform
with the minimum color being 0.5 and the maximum color being 1.
(2) if an entry is in the range [1,infinity]  the color scale should have
minimum color value 1 and maximum color value 3. (I used infinity simply
because there is no way of knowing how high the value will be beforehand). 

Any help would be greatly appreciated. 

Thanks, 
Jav

library(plotrix)
make_S_figure-function(filename,alias){
 h0  - read.csv(file=filename,head=TRUE,sep=,,row.names=1)
 d =data.matrix(h0)
 m - 1:20
 cellcolors-matrix(NA,nrow=20,ncol=20)
 cellcolors2--matrix(NA,nrow=20,ncol=20)
 for(i in 1:length(m)){

 cellcolors[d = 1]-color.scale(d[d=1],cs1=c(1,1),cs2=c(1,0),cs3=c(1,0))
 cellcolors[d1]-color.scale(d[d1],cs1=c(0,1),cs2=c(0,1),cs3=c(1,1))

color2D.matplot(d,cellcolors=cellcolors,show.values=F,na.color=white,axes=FALSE,main=alias,
xlab=,ylab=)
 axis(1,at=0.5:19.5,labels=colnames(d))
 axis(2,at=0.5:19.5,labels=rev(rownames(d)))
 }



--
View this message in context: 
http://r.789695.n4.nabble.com/Color2D-matplot-uniform-color-range-tp4184701p4184701.html
Sent from the R help mailing list archive at Nabble.com.

__
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.