Table of Numbers to Image
Sometimes you want to bring a little life or nuance to a table of numbers to emphasize certain values. You can do this pretty easily with R, although it's not very straightforward.
Starting with a table of numbers:
mst1 gcn5 mst2 elp3 gm ge me gme mei2 3.00 3.000 1.00 -2.0 4.00 0.20 -1.00 3.00 SPAC1039.02 -3.00 -2.000 -2.00 1.0 -5.00 0.70 0.90 -3.00 zym1 5.00 -0.800 0.50 -1.0 0.80 -2.00 -1.00 3.00 SPAC186.05c 0.40 -4.000 -4.00 -4.0 -5.00 -0.90 0.80 -3.00 SPAC186.06 -0.50 -3.000 -4.00 -3.0 -3.00 -0.20 2.00 -3.00 act1 0.10 0.050 0.04 -0.1 0.09 -0.10 -0.07 -0.03 pgk1 -0.05 -0.002 -0.05 -0.2 0.02 -0.05 -0.20 0.06
# reverse table so that it displays properly in image
goi.d <- goi.d[sort(1:nrow(goi.d), decreasing=T),]
#------------------------------------------#
#---- Draw the image map ----#
#------------------------------------------#
# yellow->white->blue faded
R <- c(rep(1, times=128), seq(1,0.5,length=128))
G <- c(rep(1, times=128), seq(1,0.5,length=128))
B <- c(seq(0.5,1,length=128), rep(1, times=128))
# create a color ramp
ColorRamp <- rgb(R, G, B)
# c(bottom, left, top, right)
# The default is 'c(4, 5, 4, 2) + 0.1'.
par(mar= c(4, 7, 4, 2))
# use image() to draw the color grid
# use t() to transpose the dataframe
# so it display like you see it
image(t(goi.d), col=ColorRamp, axes=F)
# create a set of points to draw labels
# across the image
x <- seq(from=0, to=1, length=ncol(goi.d))
y <- seq(from=0, to=1, length=nrow(goi.d))
# create a vector for placing text values
series <- 1:length(y)
for( i in series ){
text(x,y[i],labels=as.character(goi.d[i,]))
}
axis(3, labels=colnames(goi.d), at=x, tick=F)
axis(2, at=y, labels=rownames(goi.d), tick=F, las=2)