Re: [R] Color2D.matplot uniform color range
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
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
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
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
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.