J'utilise gplot pour produire une carte thermique montrant les changements de log2 fois d'un groupe de traitement par rapport à des contrôles appariés. Avec le code suivant:
heatmap.2(as.matrix(SeqCountTable), col=redgreen(75),
density.info="none", trace="none", dendrogram=c("row"),
symm=F,symkey=T,symbreaks=T, scale="none")
Je produis une carte de chaleur avec de vraies valeurs de changement de pli (c'est-à-dire un score non Row-Z) qui est ce que je recherche, dans le jeu de couleurs Rouge-Noir-Vert qui est le favori de tous les biologistes!
La plage réelle du changement de log2 est de -3/+ 7, avec de nombreuses valeurs dans la plage -2/-1 et + 1/+ 2, qui apparaissent respectivement en rouge/vert foncé. Cela rend l'ensemble de la carte thermique assez sombre et si difficile à interpréter.
J'ai obtenu que la gamme de couleurs soit asymétrique simplement en changeant l'argument symkey en FALSE
symm=F,symkey=F,symbreaks=T, scale="none"
Résolution du problème de couleur avec colorRampPalette avec l'argument breaks pour spécifier la plage de chaque couleur, par exemple.
colors = c(seq(-3,-2,length=100),seq(-2,0.5,length=100),seq(0.5,6,length=100))
my_palette <- colorRampPalette(c("red", "black", "green"))(n = 299)
Tout à fait
heatmap.2(as.matrix(SeqCountTable), col=my_palette,
breaks=colors, density.info="none", trace="none",
dendrogram=c("row"), symm=F,symkey=F,symbreaks=T, scale="none")
Vous pouvez essayer de créer votre propre palette de couleurs en utilisant le package RColorBrewer
my_palette <- colorRampPalette(c("green", "black", "red"))(n = 1000)
et voyez à quoi cela ressemble. Mais je suppose que dans votre cas, seule la mise à l'échelle serait utile si vous voulez vraiment garder le noir au "milieu". Vous pouvez simplement utiliser my_palette
Au lieu de redgreen()
Je vous recommande de consulter le package RColorBrewer , ils ont de jolies palettes intégrées et voir interactif site Web pour colorbrewer .
Voici une autre option pour ceux qui n'utilisent pas heatmap.2
(aheatmap
c'est bien!)
Créez un vecteur séquentiel de 100 valeurs de min à max de votre matrice d'entrée, trouvez la valeur la plus proche de 0, créez deux vecteurs de couleurs vers et à partir du milieu souhaité, combinez-les et utilisez-les:
breaks <- seq(from=min(range(inputMatrix)), to=max(range(inputMatrix)), length.out=100)
midpoint <- which.min(abs(breaks - 0))
rampCol1 <- colorRampPalette(c("forestgreen", "darkgreen", "black"))(midpoint)
rampCol2 <- colorRampPalette(c("black", "darkred", "red"))(100-(midpoint+1))
rampCols <- c(rampCol1,rampCol2)
Je pense que vous devez définir symbreaks = FALSE
Cela devrait permettre des échelles de couleurs asymétriques.