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.