2017-02-15 1 views
2

Je ne pouvais pas trouver un moyen de définir la taille de l'étiquette d'axe pour la carte de chaleur elle-même. L'argument cex.lab passé à heatmap.2 n'a aucun effet. L'appel par(cex.lab = 2.5) a un effet sur les étiquettes et le titre de l'axe des légendes (tous ensemble, je ne peux pas imaginer si on veut changer seulement le titre ...). Quoi qu'il en soit, ma question concerne les tailles d'étiquettes d'axe heatmap. Exemple de code:Comment définir la taille de l'étiquette d'axe dans gplots heatmap.2?

require(gplots) 

data(mtcars) 
x <- as.matrix(mtcars) 
heatmap.2(x, ylab = 'foo bar', xlab = 'bar foo') 
par(cex.lab = 5.0) 
heatmap.2(x, ylab = 'foo bar', xlab = 'bar foo') 
+0

'cexRow' et les arguments 'cexCol' peuvent être utiles. avez-vous étudié «heatmap»? – bouncyball

+0

merci, 'cexCol' et' cexRow' définissent la taille des étiquettes d'axe, pas les étiquettes d'axe. courir la même chose avec des résultats 'heatmap' la même chose: les étiquettes d'axe ne sont pas affectées – deeenes

Répondre

2

Code heatmap.2 il Inspecter est pas possible par la conception. appelle image pour dessiner le heatmap, et des mots-clés supplémentaires (...) lui sont passés, appelant heatmap.2(..., cex.lab = n, ...) le ferait, et image considère par, de sorte que de cette façon, il pourrait être possible. Mais ici xlab et ylab sont remplacés par des chaînes vides, et les deux ticklabels et les étiquettes des axes sont tracés plus tard:

# from gplots heatmap.2 source: 
image(1:nc, 1:nr, x, xlim = 0.5+ c(0, nc), ylim = 0.5+ c(0, nr), 
    axes = FALSE, xlab = '', ylab = '', col=col, breaks=breaks, 
    ...) 

ensuite pour dessiner les étiquettes de l'axe qu'il utilise mtext, qui n'est pas sensible aux par paramètres, mais accepte l'argument cex, qui est pas le cas ici:

# from gplots heatmap.2 source: 
if(!is.null(xlab)) mtext(xlab, side = 1, line = margins[1] - 1.25) 
if(!is.null(ylab)) mtext(ylab, side = 4, line = margins[2] - 1.25) 

Il signifie que ces étiquettes sont toujours la même taille, alors que heatmaps sont énormes parfois, alors cela pourrait être un problème. En outre, on pourrait peut-être réduire le dispositif graphique, et tous les autres éléments de texte qui ont les options pour la personnalisation, puis la taille relative des étiquettes d'axe serait plus grande. Mais comment pouvons-nous résoudre cela de manière plus flexible? Je modifié le code comme ceci:

# gplots heatmap.2 code modified: 
## add row and column headings (xlab, ylab) 
cex.lab <- ifelse(invalid(match.call()$cex.lab), 1.0, match.call()$cex.lab) 
if(!is.null(xlab)) mtext(xlab, side = 1, 
         line = margins[1] - 1.25 + cex.lab/5, 
         cex = cex.lab) 
if(!is.null(ylab)) mtext(ylab, side = 4, 
         line = margins[2] - 1.25 + cex.lab/5, 
         cex = cex.lab) 

Le seul problème est le paramètre de positionnement qui est maintenant cex.lab/5, cela évite chevauchement avec ticklabels dans des gammes raisonnables, mais Maye un autre paramètre doit être ajouté à la fonction, afin que les utilisateurs peuvent modifier si ça ne va pas.

Vous pouvez copier heatmap.2.R de gplotssource dans votre répertoire de travail, la modifier et de la source, il:

source('heatmap.2.R') 

Cependant, vous devez également ajouter ces lignes au début:

require(gtools) 
plot.dendrogram = stats:::plot.dendrogram