Mike Livermore – CSI 773 – Week 2 Assignment – Functions and bar plots - September 2010
2:
coloredMatrix = function(mat,nbreaks=5,colors,
title="",padx=.5,pady=.5,border=NULL){
# create a matrix of integer with values from 1 to nbreaks
# This use nbreaks equally space intevals over the range of the data
matColorSubs = cut(mat,breaks=nbreaks,include.lowest=T)
# Define colors if not supplied in the function argument
# The ones below are diverging colors from ColorBrewer
if(missing(colors)){
colors=c("#2C7BB6","#ABD9E9","#FFFFBF","#FDAE61","#CA373B")
}
# We generate x and y coordinates for the centers of the rectangles
# Start with coordinates yloc and xloc of a single row and a single column
nr = nrow(mat)
nc = ncol(mat)
yloc = nr:1 # Most people think of the top row as row 1
xloc = 1:nc
# Produce all pairing of one element for each of the two vectors
xyLat = expand.grid(list(y=yloc,x=xloc))
# Extract the vectors in the list as separate vectors
y=xyLat$y
x=xyLat$x
# Set of the plot scale
plot(c(1-padx,padx+nc),c(1-pady,pady+nr),type="n",axes=F,
xlab="",ylab="",main=title,cex=1.2)
# Set the size of the rectangles relative to the grid and plot.
# The rectangle centers at integer values
# rect needs the lower left x and y and the upper right x and y
# For x-dx and y-dy to x+dx and y+dy what should dx and dy
# be for the rectangles to touch?
dx = .5 # This is a single value that will replicate when used below
dy = .5 # This is a single value that will replicate when used below
rect(x-dx,y-dy,x+dx,y+dy,border=border,col=colors[matColorSubs])
return("Done")
}
## End
windows()
mat = matrix(rnorm(2500),ncol=50)
coloredMatrix(mat,border="gray")
3: