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.