Orientação de rótulos diagonais no eixo x em mapas de calor

Criar heatmaps em R tem sido um tópico de muitos posts, discussões e iterações. Meu principal problema é que é complicado combinar a flexibilidade visual das soluções disponíveis na estruturalevelplot() ou gráficos básicosimage(), com clustering sem esforço de básicoheatmap()pheatmappheatmap() ou gplots 'heatmap.2(). É um pequeno detalhe que eu quero mudar - orientação diagonal de rótulos no eixo x. Deixe-me mostrar meu ponto no código.

#example data
d <- matrix(rnorm(25), 5, 5)
colnames(d) = paste("bip", 1:5, sep = "")
rownames(d) = paste("blob", 1:5, sep = "")

Você pode mudar a orientação para diagonal facilmente comlevelplot():

require(lattice)
levelplot(d, scale=list(x=list(rot=45)))

mas aplicar o agrupamento parece dor. O mesmo acontece com outras opções visuais, como adicionar bordas ao redor das células do mapa de calor.

Agora, mudando para realheatmap() funções relacionadas, agrupamento e todos os recursos visuais básicos são super simples - quase nenhum ajuste é necessário:

heatmap(d)

e assim está aqui:

require(gplots)
heatmap.2(d, key=F)

e finalmente, meu favorito:

require(pheatmap)
pheatmap(d) 

Mas todos eles têmnenhuma opção para girar as etiquetas. Manual parapheatmap sugere que eu possa usargrid.text para personalizar minhas etiquetas. Que alegria é - especialmente quando agrupamos e mudamos a ordem dos rótulos exibidos. A menos que eu esteja sentindo falta de algo aqui ...

Finalmente, há um bom velhoimage(). Eu posso rotular rótulos, em geral é a solução mais personalizável, mas não há opção de cluster.

image(1:nrow(d),1:ncol(d), d, axes=F, ylab="", xlab="")
text(1:ncol(d), 0, srt = 45, labels = rownames(d), xpd = TRUE)
axis(1, label=F)
axis(2, 1:nrow(d), colnames(d), las=1)

Então, o que devo fazer para obter o meu mapa de calor ideal e rápido, com clustering e orientação e recursos visuais agradáveis ​​de hacking? Meu melhor lance está mudandoheatmap() oupheatmap() de alguma forma, porque esses dois parecem ser mais versáteis no ajuste. Mas qualquer solução é bem vinda.

questionAnswers(6)

yourAnswerToTheQuestion