Orientación de las etiquetas diagonales en el eje x en mapas de calor (s)

La creación de mapas de calor en R ha sido un tema de muchas publicaciones, discusiones e iteraciones. Mi problema principal es que es difícil combinar la flexibilidad visual de las soluciones disponibles en celosíalevelplot() o graficos basicosimage(), con agrupamiento sin esfuerzo de básicosheatmap()pheatmap'spheatmap() o gplots 'heatmap.2(). Es un pequeño detalle que quiero cambiar: la orientación diagonal de las etiquetas en el eje x. Déjame mostrarte mi punto en el código.

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

Puedes cambiar la orientación a la diagonal fácilmente conlevelplot():

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

Pero aplicar el agrupamiento parece dolor. Lo mismo ocurre con otras opciones visuales, como agregar bordes alrededor de celdas de mapa de calor.

Ahora, cambiando a realheatmap() Las funciones relacionadas, el agrupamiento y todos los elementos visuales básicos son super simples, casi no se requieren ajustes:

heatmap(d)

y así está aquí:

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

y finalmente, mi favorita:

require(pheatmap)
pheatmap(d) 

Pero todos esos tienenNo hay opción para rotar las etiquetas.. Manual parapheatmap sugiere que puedo usargrid.text orientar a medida mis etiquetas. Qué alegría es, especialmente al agrupar y cambiar el orden de las etiquetas mostradas. A menos que me esté perdiendo algo aquí ...

Finalmente, hay un viejo bien.image(). Puedo rotar las etiquetas, en general es la solución más personalizable, pero no la opción de agrupamiento.

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)

Entonces, ¿qué debo hacer para obtener mi mapa de calor rápido e ideal, con agrupación y orientación, y buenas características visuales de hacking? Mi mejor oferta está cambiando.heatmap() opheatmap() de alguna manera porque esos dos parecen ser los más versátiles en ajuste. Pero cualquier solución bienvenida.

Respuestas a la pregunta(6)

Su respuesta a la pregunta