He visto mapas de calor con valores en R diferentes sistemas gráficos incluyendo la rejilla y base de este tipo:

mapa de calor con valores (ggplot2)

Que tienden a usar ggplot2 un poco y me gustaría ser capaz de hacer un mapa de calor con la celda correspondiente de los valores graficados. Aquí está el mapa de calor y un intento de utilizar geom_text:

library(reshape2, ggplot2)
dat <- matrix(rnorm(100, 3, 1), ncol=10)
names(dat) <- paste("X", 1:10)
dat2 <- melt(dat, id.var = "X1")
p1 <- ggplot(dat2, aes(as.factor(Var1), Var2, group=Var2)) +
    geom_tile(aes(fill = value)) +
    scale_fill_gradient(low = "white", high = "red") 
p1

#attempt
labs <- c(apply(round(dat[, -2], 1), 2, as.character))
p1 +  geom_text(aes(label=labs), size=1)

Normalmente puedo averiguar los valores de x e y para pasar, pero no sé en este caso, dado que esta información no se almacena en el conjunto de datos. ¿Cómo puedo colocar el texto en el mapa de calor?

InformationsquelleAutor Tyler Rinker | 2013-01-12

2 Comentarios

  1. 76

    Este ha sido actualizado para ajustarse a tidyverse principios y mejorar el mal uso de ggplot2

    Por SlowLeraner comentario yo era fácilmente capaz de hacer esto:

    library(tidyverse)
    
    ## make data
    dat <- matrix(rnorm(100, 3, 1), ncol=10)
    
    ## reshape data (tidy/tall form)
    dat2 <- dat %>%
        tbl_df() %>%
        rownames_to_column('Var1') %>%
        gather(Var2, value, -Var1) %>%
        mutate(
            Var1 = factor(Var1, levels=1:10),
            Var2 = factor(gsub("V", "", Var2), levels=1:10)
        )
    
    ## plot data
    ggplot(dat2, aes(Var1, Var2)) +
        geom_tile(aes(fill = value)) + 
        geom_text(aes(label = round(value, 1))) +
        scale_fill_gradient(low = "white", high = "red") 

    mapa de calor con valores (ggplot2)

    • Todavía útil! He recibido una advertencia (en ggplot2 v. 2.2.0) Ignoring unknown aesthetics: fill. Un poco de bricolaje mostró que la penúltima línea no necesita un relleno de valor. Así que esto produce el mismo resultado para mí, sin ninguna advertencia: geom_text(label = round(dat2$value, 1)))
    • toda la cosa anticuada, así que he actualizado es
    • genial, muchas gracias. Hay algunos sintaxis de ahí no me reconocen… Tiempo para llegar a googlear.
    • Muchas gracias. ¿Cómo puedo actualizar este gráfico para parecerse a esta:
    • Impresionante intro, hermano. Cualquier consejos de cómo me pueden topar el juego para hacer el «mapa de calor» son como imgur.com/gallery/X2Zxf?
    • no estoy seguro, pero que sería bueno. Tal vez la adición de anotaciones en la parte superior y/o la combinación de las parcelas (algunos sólo texto) utilizando gridExtra, cowplot, y/o ggtree paquetes. En cualquier caso, esta es una nueva pregunta en sí y de por sí que me gustaría saber la respuesta. Podría iniciar un nuevo hilo?
    • es importante tener geom_text después de geom_tile de lo contrario no obtendrá ninguna etiqueta y me pregunto por qué.
    • Pero el «mapa de calor» que ploted es no en el mismo orden que en el original dat dataframe que creó. ¿Cómo se puede hacer que se vea exactamente como que. Pensé que se lo OP estaba pidiendo, y lo que yo pensaba que me iba a encontrar. Gracias 🙂
    • La contestadora y OP son uno y el mismo. ¿Cómo es que no en el mismo orden? Si usted no recibe el mismo orden y que usted necesita para hacer un factor de x/y vars y establecer los niveles.
    • Cómo se puede añadir un pequeño borde blanco alrededor de cada número?
    • Que es una nueva pregunta que merece su propio hilo. Hay algunos enfoques que podría ser posible.

  2. 2

    Hay otra manera más simple de hacer mapas de calor con valores. Usted puede utilizar pheatmap para ello.

    dat <- matrix(rnorm(100, 3, 1), ncol=10)
    names(dat) <- paste("X", 1:10)
    install.packages('pheatmap') # if not installed already
    library(pheatmap)
    pheatmap(dat, display_numbers = T)

    Esto le dará una trama como esta

    mapa de calor con valores (ggplot2)

    Si quieres quitar la agrupación y el uso de su esquema de color que usted puede hacer

    pheatmap(dat, display_numbers = T, color = colorRampPalette(c('white','red'))(100), cluster_rows = F, cluster_cols = F, fontsize_number = 15)

    mapa de calor con valores (ggplot2)

    También puede cambiar el tamaño, el formato y el color de los números mostrados.

Dejar respuesta

Please enter your comment!
Please enter your name here