2011-12-21 7 views
5

Ho una domanda sul pacchetto gplots. Voglio usare la funzione heatmap.2 e quindi voglio cambiare il mio punto simmetrica in chiave di colore da 0 a 1. Normalmente quando symkey=TRUE e si utilizza il col=redgreen(), viene creata una barra colorata in cui i colori vengono gestiti in questo modo:R: heatmap.2 cambia colore chiave

red = -2 to -0.5 
black=-0.5 to 0.5 
green= 0.5 to 2 

Ora voglio creare una barra colorata come questa:

red= -1 to 0.8 
black= 0.8 to 1.2 
green= 1.2 to 3 

è qualcosa di simile possibile?

Grazie!

risposta

9

Se si guarda the heatmap.2 help file, sembra che si desideri l'argomento breaks. Dal file di aiuto:

breaks (opzionale) O un vettore numerico che indica i punti di divisione per discretizzazione x in colori, oppure un numero intero di punti di rottura da utilizzare, nel qual caso i punti di rottura saranno distanziati ugualmente tra min (x) e max (x)

Quindi, si utilizza breaks per specificare i punti di interruzione per ciascun colore. es .:

library(gplots) 

# make up a bunch of random data from -1, -.9, -.8, ..., 2.9, 3 
# 10x10 
x = matrix(sample(seq(-1,3,by=.1),100,replace=TRUE),ncol=10) 

# plot. We want -1 to 0.8 being red, 0.8 to 1.2 being black, 1.2 to 3 being green. 
heatmap.2(x, col=redgreen, breaks=c(-1,0.8,1.2,3)) 

Il bit cruciale è il breaks=c(-1,0.8,1.2,3) essere vostri tagli.

+0

Grazie Mathematical.coffee. C'è anche un modo per creare un po 'più di sovrapposizione ai colori? Normalmente uso redgreen (75) che crea 75 colori! – Lisann

+0

Come in, si desidera che da -1 a 0.8 siano sfumature di rosso variabili, da 0,8 a 1,2 tonalità di nero (!), Da 1,2 a 3 diverse tonalità di verde? Puoi provare ad aggiungere più pause alle tue 'pause'. per esempio. 'c (seq (-1,0,8, lunghezza = 5), seq (0,8,1,2, lunghezza = 5), seq (1,2,3, lunghezza = 5)' per avere circa 5 sfumature per ogni pausa e così via. Ma devi avere lo stesso numero di sfumature per ogni interruzione poiché 'redgreen' scala linearmente da rosso a verde: se non è uniforme otterrai bit di colori striscianti l'uno nell'altro, ma poiché' redgreen' è un gradiente di colore graduale, come dirai quando arresti rossi e neri, ecc.? –

+0

Grazie! questo era esattamente ciò di cui avevo bisogno! :) – Lisann