Question

Using this dummy code saved in a file named foo.txt...

COG,station1,station2,station3,station4,station5
COG000Z,0.019393497,0.183122497,0.089911227,0.283250444,0.074110521
COG0002,0.044632051,0.019118032,0.034625785,0.069892277,0.034073709
COG0001,0.033066112,0,0,0,0
COG0004,0.115086472,0.098805295,0.148167492,0.040019101,0.043982814
COG0005,0.064613057,0.03924007,0.105262559,0.076839235,0.031070155
COG0006,0.079920475,0.188586049,0.123607421,0.27101229,0.274806929
COG0007,0.051727492,0.066311584,0.080655401,0.027024185,0.059156417
COG0008,0.126254841,0.108478559,0.139106704,0.056430812,0.099823028

I made a heatmap in ggplot2 with the accompanying code from following this answer on stackexchange.

> library(ggplot2)
> foo = read.table('foo.txt', header=T, sep=',')
> foomelt = melt(foo)
Using COG as id variables
> ggplot(foomelt, aes(x=COG, y=variable, fill=value)) + geom_tile() + scale_fill_gradient(low='white', high='steelblue')

It produces a really nice heatmap, but I'm really just after the color codes of each tile (basically the original foo but with color codes in place of each variable). Any idea how to go about this?

Was it helpful?

Solution

Rather than extracting the colours from the plot, use colorRampPalette:

a<-colorRampPalette(c("white","steelblue"))
plot_colours<-a(n)

where n is the number of colours in your heat map. In your example, I get n=6 so:

n<-6
a(n)

returns

[1] "#FFFFFF" "#DAE6F0" "#B4CDE1" "#90B3D2" "#6A9BC3" "#4682B4"

and

image(1:n,1,as.matrix(1:n),col=a(n))

returns

color-ramp

OTHER TIPS

I'm working on pulling all scale related code from ggplot2 into a separate package - this will make it much easier to use the same scales in different ways. See https://github.com/hadley/scales for the in progress code.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top