I have the following data:
dat <- structure(list(GO = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 5L, 5L, 5L, 5L, 5L, 5L), .Label = c("apoptotic process", "metabolic process", "negative regulation of apoptotic process", "positive regulation of apoptotic process", "signal transduction" ), class = "factor"), ProbeGene = structure(c(14L, 15L, 2L, 12L, 7L, 11L, 16L, 8L, 19L, 13L, 3L, 1L, 18L, 4L, 10L, 5L, 9L, 17L, 20L, 6L), .Label = c("1416787_at Acvr1", "1418835_at Phlda1", "1419282_at Ccl12", "1423240_at Src", "1424896_at Gpr85", "1434186_at Lpar4", "1434670_at Kif5a", "1440374_at Pde1c", "1440681_at Chrna7", "1440803_x_at Tacr3", "1442017_at LOC101056574", "1448815_at Ogg1", "1448821_at Tyr", "1451338_at Nisch", "1454721_at Arel1", "1456300_at Ilvbl", "1456989_at Oxgr1", "1457580_at Chd8", "1457827_at Arsj", "1460657_at Wnt10a" ), class = "factor"), foo = c(1.412475312, 1.413647397, 1.41297239, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781), bar = c(-0.645532476, -0.741475951, -0.655185417, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781, -0.707106781), aux = c(-0.766942837, -0.672171445, -0.757786973, 1.414213562, 1.414213562, 1.414213562, 1.414213562, 1.414213562, 1.414213562, 1.414213562, 1.414213562, 1.414213562, 1.414213562, 1.414213562, 1.414213562, 1.414213562, 1.414213562, 1.414213562, 1.414213562, 1.414213562)), .Names = c("GO", "ProbeGene", "foo", "bar", "aux"), row.names = c(50L, 35L, 45L, 74L, 61L, 101L, 96L, 68L, 69L, 75L, 113L, 127L, 109L, 135L, 150L, 152L, 183L, 190L, 197L, 191L), class = "data.frame")
It looks like this (they are sorted by the GO column):
> dat GO ProbeGene foo bar aux 50 apoptotic process 1451338_at Nisch 1.4124753 -0.6455325 -0.7669428 35 apoptotic process 1454721_at Arel1 1.4136474 -0.7414760 -0.6721714 45 apoptotic process 1418835_at Phlda1 1.4129724 -0.6551854 -0.7577870 74 metabolic process 1448815_at Ogg1 -0.7071068 -0.7071068 1.4142136 61 metabolic process 1434670_at Kif5a -0.7071068 -0.7071068 1.4142136 101 metabolic process 1442017_at LOC101056574 -0.7071068 -0.7071068 1.4142136 96 metabolic process 1456300_at Ilvbl -0.7071068 -0.7071068 1.4142136 68 metabolic process 1440374_at Pde1c -0.7071068 -0.7071068 1.4142136 69 metabolic process 1457827_at Arsj -0.7071068 -0.7071068 1.4142136 75 metabolic process 1448821_at Tyr -0.7071068 -0.7071068 1.4142136 113 negative regulation of apoptotic process 1419282_at Ccl12 -0.7071068 -0.7071068 1.4142136 127 negative regulation of apoptotic process 1416787_at Acvr1 -0.7071068 -0.7071068 1.4142136 109 negative regulation of apoptotic process 1457580_at Chd8 -0.7071068 -0.7071068 1.4142136 135 positive regulation of apoptotic process 1423240_at Src -0.7071068 -0.7071068 1.4142136 150 signal transduction 1440803_x_at Tacr3 -0.7071068 -0.7071068 1.4142136 152 signal transduction 1424896_at Gpr85 -0.7071068 -0.7071068 1.4142136 183 signal transduction 1440681_at Chrna7 -0.7071068 -0.7071068 1.4142136 190 signal transduction 1456989_at Oxgr1 -0.7071068 -0.7071068 1.4142136 197 signal transduction 1460657_at Wnt10a -0.7071068 -0.7071068 1.4142136 191 signal transduction 1434186_at Lpar4 -0.7071068 -0.7071068 1.4142136 >
What I want to do is create a heatmap with a color side denoting GO columns. At the end, it will look like this (I manually add a blue column):

I am stuck in the following code:
library(gplots) dat.tmp <- dat dat.tmp$GO <- NULL rownames(dat.tmp) <- dat.tmp$ProbeGene dat.tmp$ProbeGene <- NULL heatmap.2(as.matrix(dat.tmp),margin=c(5,15),dendrogram="none",trace="none",scale="row")