Hi Jean, Thanks a ton for the help. I think Im almost there, but there is still something weird about my stuff. I have been able to understand the color.scale() function. Now, I am trying to plot a key for the corresponding colors. The function is called ColorBar, which apparently works - the colors are indeed lut <- rev(heat.colors(10)) and go from my minimum to my maximum values. However, when I try to apply this to my mycolors( and then plot it, I suddenly have colors that seem to be outside of the min-max (in the greens and blacks), instead of the white to red gradient. Hope this is not too complicated of a code, but I think copy-paste it should give the (problematic) result. I guess there is a small error somewhere, but I cant figure out what I have done wrong :-( Thanks a lot for any suggestion. Patrick
#------------------------------------------------------------ library(plotrix) #------------------------------------------------------------ # ColorBar ColorBar <- function(lut, min, max, nticks=5, ticks=seq(min, max, len=nticks), title='') { scale = (length(lut)-1)/(max-min) plot(c(min,max),c(0,10), type='n', bty='n', xaxt='n', xlab='', yaxt='n', ylab='', main=title) axis(1, ticks, las=1, cex.axis=0.5, lwd=0.5) for (i in 1:(length(lut)-1)) { y = (i-1)/scale + min rect(y,0,y+1/scale,0.5, col=lut[i], border=NA) } } #------------------------------------------------------------ # RectPlotter RectPlotter <- function(matrixval, ycoord, height, mycolors){ rect(matrixval[,1], (ycoord-(0.4*height)), matrixval[,2], (ycoord+(0.4*height)), col=mycolors, border = NA) } fake <- cbind(c(1,2,5,8,12,19), c(2,5,8,12,19,20), runif(6, 0, 2), runif(6, 0, 2), runif(6, 0, 2)) mymatrix <- fake # Plot the color key on the lower part lut <- rev(heat.colors(10)) minimum <- round(min(mymatrix[,-(1:2)]), digits=2) maximum <- round(max(mymatrix[,-(1:2)]), digits=2) ColorBar(lut=lut, min=minimum, max=maximum) par(new=TRUE) #____________________________________________ #_______________PROBLEM HERE_______________ mycolors <- cbind(mymatrix[,1:2],color.scale(mymatrix[,-(1:2)], extremes=lut)) plot(c(mymatrix[1,1],mymatrix[length(mymatrix[,1]),2]), c(0,1), col="White", xlab="", ylab="", main=title, axes=F) ycenter <- seq(from=0, to=1, length=(length(mymatrix[1,])+2)) yheight <- 1/length(ycenter) # Plot the actual heatmap for(i in 3:length(mymatrix[1,])){ #for(i in 3:5){ RectPlotter(mymatrix[,c(1,2,i)], ycenter[length(ycenter)-i+2], yheight, mycolors[,i]) text(mymatrix[1,1], ycenter[length(ycenter)-i+2], colnames(mymatrix)[i], cex=0.5, pos=4) } On Jan 7, 2014, at 18:48, Adams, Jean <jvad...@usgs.gov> wrote: > Patrick, > > You should cc r-help on all correspondence so that others can follow the > thread. > > The color range will be matched to the "x" argument you provide to the > color.scale function (in package plotrix). So you don't need to manually > provide the min and max yourself. If for some reason you did need to provide > that information, you would use the xrange argument not the extremes argument > (which is expecting colors). > > mycolors <- color.scale(mymatrix[,-(1:2)], c(0,1,1), c(1,1,0), c(1,0,1)) > > Jean > > > On Tue, Jan 7, 2014 at 4:16 PM, Pachapep <pacha...@gmail.com> wrote: > > Hi Jean > Thanks for the quick answer. It looks like it works, but the issue is that my > real data fluctuates between 0 and 2, so I everything is red. > I tried using another function (color.scale), which works but gives me grey > scale only (no colors) although I dont really understand why - its a > detail, but it's kind of a bummer.. > > mycolors <- color.scale(mymatrix[,-(1:2)], c(0,1,1), c(1,1,0), c(1,0,1), > extremes=c(min(mymatrix[,-(1:2)]), max(mymatrix[,-(1:2)]))) > > Is there a way to make an array using the min and max of the matrix (as I > used in color.scale() above) so that the colors go from blue to red? > Thanks again for the help. > Patrick > > On Jan 7, 2014, at 15:04, Adams, Jean <jvad...@usgs.gov> wrote: > >> Patrick, >> >> You were pretty close. >> To fix the code you have, just change "matrix" to "mymatrix" in two places, >> and either specify the argument data= or place the heat.colors bit first in >> the matrix function. >> >> Or ... you could use the array() function instead, to shorten up the code a >> little. >> mycol <- array(heat.colors(max(mymatrix[, 3:5]))[mymatrix[, 3:5]], >> dim=dim(mymatrix)) >> >> Jean >> >> >> On Mon, Jan 6, 2014 at 9:19 PM, Pachapep <pacha...@gmail.com> wrote: >> Hi all, >> I have a matrix which I want to plot in color. I have extensively looked at >> level plot and heatmap/heatmap.2, but I would like to be able to manage the >> size of the bins (boxes) on my X axis. So I thought of simply using the >> rect() function, but I cant get around assigning the correct colors to all >> the values. I have built a RectPlotter() function that takes the start and >> stop as well as the value assigned to each bin. >> Here is what I have done so far (after countless hours of despair): >> >> RectPlotter <- function(matrixval, ycoord, height, mycolors){ >> rect(matrixval[,1], (ycoord-(0.4*height)), matrixval[,2], >> (ycoord+(0.4*height)), col=mycolors, border = NA) >> } >> >> starts <- c(1,5,8,15) >> ends <- c(5, 8, 15, 25) >> vals1 <- c(2, 15, 7, 13) >> vals2 <- c(7, 2, 1, 26) >> vals3 <- c(52, 1, 29, 18) >> mymatrix <- cbind(starts, ends, vals1, vals2, vals3) >> # This gives me an error >> mycol<- matrix(nrow=dim(mymatrix)[1], ncol=dim(mymatrix)[2], >> heat.colors(max(matrix[,3:5]))[matrix[,3:5]]) >> >> >> At the end, I would like to have something like a levelplot, but using the >> starts and ends as x-axis. >> Any help would be highly appreciated. Thanks! >> Patrick >> ______________________________________________ >> 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. >> > > [[alternative HTML version deleted]]
______________________________________________ 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.