Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extract color information from ggplot2?

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?

like image 935
zachwill Avatar asked Dec 16 '22 20:12

zachwill


2 Answers

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.

like image 79
hadley Avatar answered Jan 08 '23 15:01

hadley


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

like image 45
fideli Avatar answered Jan 08 '23 15:01

fideli