Comment affecter votre échelle de couleurs sur les données brutes dans heatmap.2 ()
J'ai des données qui ressemble à ceci:
Name h1 h2 h3 h4 h5
1 1420468_at_Asb17 0.000 2.328 0.000 0.000 0.000
2 1430261_at_1700024J04Rik 1.236 2.050 0.000 0.000 0.000
3 1431788_at_Fabp12 0.000 2.150 0.000 0.000 0.587
4 1433187_at_B230112I24Rik 0.000 2.240 1.343 0.000 1.383
5 1434430_s_at_Adora2b 0.000 2.006 1.459 0.000 1.272
6 1435217_at_Gm7969 0.727 2.350 1.494 0.976 0.000
7 1436717_x_at_Hbb-y 0.000 2.712 0.000 0.000 0.000
8 1440859_at_Akap6 0.000 2.053 0.000 0.000 1.840
9 1442625_at_--- 0.000 2.064 1.173 0.000 1.035
10 1443715_at_Rbm24 0.969 2.219 0.000 0.000 0.000
11 1445520_at_--- 0.000 2.497 0.000 0.000 0.000
12 1446035_at_Gm7173 0.000 3.869 0.000 0.000 0.000
13 1446597_at_6820445E23Rik 1.000 2.000 0.000 0.000 0.000
14 1448925_at_Twist2 0.000 2.089 0.938 0.000 0.000
15 1449711_at_Atp6v1e1 0.605 2.363 2.350 1.094 0.976
16 1455931_at_Chrna3 0.000 2.354 0.000 0.000 0.000
17 1457647_x_at_1600023N17Rik 0.000 2.734 0.000 0.000 1.812
18 1458975_at_--- 0.000 2.079 0.000 0.000 0.000
19 1459862_at_--- 0.727 2.606 0.000 0.000 1.151
Remarque dans cette base de données (et le réel) il n'y a pas de valeurs négatives et les valeurs positives
peut être aussi grand que 100.
Ce que je veux faire est de tracer la carte de la chaleur avec ma propre échelle de couleurs et de régime:
- Lorsque la valeur est 0 le mettre en blanc.
- Lorsque la valeur est == 1 dans le noir.
- Lorsque la valeur est > 1 dans l'ombre de rouges.
- Lorsque la valeur est < 1 > 0 dans l'ombre de la verdure.
également sans l'aide de toutes les données de mise à l'échelle ou intégré dans le z-score de la transformation.
Comment puis-je y parvenir?
Mon code actuel est: est-ce
library(gplots)
# Read data
dat <- read.table("http://dpaste.com/1501148/plain/",sep="\t",header=T);
rownames(dat) <- dat$Name
dat <- dat[,!names(dat) %in% c("Name")]
# Clustering and distance measure functions
hclustfunc <- function(x) hclust(x, method="complete")
distfunc <- function(x) dist(x,method="maximum")
# Define colours
hmcols <- rev(redgreen(2750));
# Plot
pdf("~/Desktop/tmp.pdf",height=10)
heatmap.2(as.matrix(dat),Colv=FALSE,dendrogram="row",scale="row",col=hmcols,trace="none", margin=c(5,10), hclust=hclustfunc,distfun=distfunc,lwid=c(1.5,2.0),keysize=1);
dev.off()
Qui produit la suite de l'intrigue, où il utilise la valeur par défaut z-score de la ligne de mise à l'échelle.
source d'informationauteur neversaint
Vous devez vous connecter pour publier un commentaire.
La clé ici est de comprendre que
heatmap.2
utilise lecol
argument en combinaison avec labreaks
argument.Prendre un coup d'oeil au code et à la figure ci-dessous pour voir ce que je veux dire.
Comme vous pouvez le voir, il doit y avoir
n-1
couleurs pourn
pauses. Pour votre question, le problème est de cartographier les bonnes couleurs pour les pauses. Je suis à l'aide de lascale="none"
option @josilber souligné.Une autre solution serait d'avoir les deux gradients: vert->noir et noir->rouge. Ensuite, vous pouvez définir manuellement les valeurs zéro à blanc par leur
NA
et réglagena.color="white"
.Et enfin, vous pouvez simplement modifier manuellement le dégradé pour les valeurs égales à zéro.
Journal des fois les changements
Sur une autre note, il semble que vous pourriez être à la recherche à la fois les changements ou d'un certain type de rapport. Il est assez commun pour tracer le journal des fois les changements lors de la prise d'une carte de chaleur. J' "grisé" les valeurs égales à zéro.
Pour une explication de @josilber la solution sympa:
Ce code
hmcols <- c(colfunc1(200), colfunc2(200*(max(dat) - 1)))
faitun caractère de vecteur de longueur 774 (vu par
length(hmcols)
). Donc, cela signifie qu'il devrait être 775 pauses définies. Leheatmap.2
fonction par défaut rendn+1
pauses oùn
est la longueur du vecteur utilisé dans lecol
argument. Ainsi, le nombre des pauses et des couleurs est travaillé, mais comment nehmcols <- c(colfunc1(200), colfunc2(200*(max(dat) - 1)))
carte les couleurs pour les pauses correctement? Le truc, c'est moyen astucieux que lehmcols
vecteur a été créé. Le nombre de couleurs dans le premier gradient est de 200. Depuisbreaks
n'a pas été explicitement défini, nous savons que les pauses seront espacés de manière égale. Depuis le premier gradient va de 0 à 1 et il y a 200 sauts de, la largeur de chaque saut doit être 0.005 (ou 1/200). Depuis le second gradient de 1 à 3.869 (max(dat)
), il doit être 2.869/0.005=573.8 des pauses (574 pauses lors de l'arrondi vers le haut). Notez que le200*(max(dat) - 1))
ne ce calcul; il sorties 573.8. Ainsi, il y a 200+574 couleurs mappé à la bonne pauses et tout fonctionne!Je pense qu'il y a deux choses ici. La première est de savoir comment se débarrasser de la z-scores. Cela peut être fait avec le
scale="none"
paramètreheatmap.2
.L'autre question entoure votre choix dégradé. Je me suis appuyé sur
colorRampPalette
pour cette partie. Ci-dessous, je construis un dégradé qui va du blanc -> vert -> noir pour les valeurs de 0 à 1 et puis s'en va en noir> rouge pour les valeurs de 1 ->max(dat)
.Le thème principal ici est de définir des pauses et des couleurs spécifiques pour chaque pause. Ceci peut être réalisé en utilisant heatmap.2 la fonction.