Mapa de calor en ggplot2

Datos de muestra

Dada una matriz numérica, tendrás que transformarla en un data frame que ggplot2 pueda entender (lo que se conoce como long format). Para ello puedes utilizar la función melt de la librería reshape.

# install.packages("reshape")
library(reshape)

# Datos
set.seed(8)
m <- matrix(round(rnorm(200), 2), 10, 10)
colnames(m) <- paste("Col.", 1:10)
rownames(m) <- paste("Fila", 1:10)

# Transformar la matriz en long format
df <- melt(m)
colnames(df) <- c("x", "y", "valor")

Mapa de calor con geom_tile

En ggplot2 se puede crear un mapa de calor con geom_tile, pasando las variables categóricas a los argumentos x e y y la variable continua al argumento fill de aes.

# install.packages("ggplot2")
library(ggplot2)

ggplot(df, aes(x = x, y = y, fill = valor)) +
  geom_tile()

geom_tile en ggplot2

Celdas cuadradas

Ten en cuenta que dependiendo del tamaño de la ventana gráfica las celdas pueden no ser cuadradas. Si quieres que siempre sean cuadradas usa cood_fixed.

# install.packages("ggplot2")
library(ggplot2)

ggplot(df, aes(x = x, y = y, fill = valor)) +
  geom_tile() +
  coord_fixed()

Mapa de calor (heat map) en ggplot2 con geom_tile

Personalización del borde

Puedes personalizar el color del borde, ancho y tipo de línea de las celdas con los argumentos color, lwd y linetype, respectivamente.

# install.packages("ggplot2")
library(ggplot2)

ggplot(df, aes(x = x, y = y, fill = valor)) +
  geom_tile(color = "white",
            lwd = 1.5,
            linetype = 1) +
  coord_fixed()

Personalización del borde de geom_tile

Añadiendo los valores

Además, puedes agregar los valores sobre las celdas con geom_text, pasando la variable numérica al argumento label de la función aes.

# install.packages("ggplot2")
library(ggplot2)

ggplot(df, aes(x = x, y = y, fill = valor)) +
  geom_tile(color = "black") +
  geom_text(aes(label = valor), color = "white", size = 4) +
  coord_fixed()

Mapa de calor con valores en ggplot2

Paleta de colores

Existen varias maneras de cambiar la paleta de colores por defecto cuando se crea un mapa de calor: usar scale_fill_gradient, scale_fill_gradient2 o scale_fill_gradientn.

Mapa de calor con colores personalizados en ggplot2

scale_fill_gradient

Esta función permite cambiar los colores, creando un degradado entre el color para el valor más bajo y el color para el valor más alto.

# install.packages("ggplot2")
library(ggplot2)

ggplot(df, aes(x = x, y = y, fill = valor)) +
  geom_tile(color = "black") +
  scale_fill_gradient(low = "white", high = "red") +
  coord_fixed()

Mapa calor ggplot2 color degradado

scale_fill_gradient2

Si quieres añadir un color intermedio utiliza scale_fill_gradient2, que incluye el argumento mid.

# install.packages("ggplot2")
library(ggplot2)

ggplot(df, aes(x = x, y = y, fill = valor)) +
  geom_tile(color = "black") +
  scale_fill_gradient2(low = "#075AFF",
                       mid = "#FFFFCC",
                       high = "#FF0000") +
  coord_fixed()

Paleta color mapa calor ggplot2

scale_fill_gradientn

Por último, también puedes utilizar una paleta de colores personalizada con scale_fill_gradientn, ya que permite pasar n colores al argumento colors. En este ejemplo estamos pasando 20 colores de la paleta "RdYlGn".

# install.packages("ggplot2")
library(ggplot2)

ggplot(df, aes(x = x, y = y, fill = valor)) +
  geom_tile(color = "black") +
  scale_fill_gradientn(colors = hcl.colors(20, "RdYlGn")) +
  coord_fixed()

Personalización de la leyenda

Ancho y alto

Puedes cambiar el ancho y el alto de la leyenda con el siguiente código:

# install.packages("ggplot2")
library(ggplot2)

ggplot(df, aes(x = x, y = y, fill = valor)) +
  geom_tile(color = "black") +
  coord_fixed() +
  guides(fill = guide_colourbar(barwidth = 0.5,
                                barheight = 20))

Ancho y alto de la leyenda de un mapa de calor en ggplot2

Cambiar el título

El título por defecto de la leyenda es el nombre de la variable continua del data frame. Si quieres cambiarlo pasa una cadena al argumento title de la función guide_colourbar.

# install.packages("ggplot2")
library(ggplot2)

ggplot(df, aes(x = x, y = y, fill = valor)) +
  geom_tile(color = "black") +
  coord_fixed() +
  guides(fill = guide_colourbar(title = "Título"))

Título leyenda mapa calor ggplot2

Borrar las etiquetas y las marcas

También puedes eliminar las etiquetas y/o las marcas de la leyenda estableciendo los argumentos correspondientes como FALSE.

# install.packages("ggplot2")
library(ggplot2)

ggplot(df, aes(x = x, y = y, fill = valor)) +
  geom_tile(color = "black") +
  coord_fixed() +
  guides(fill = guide_colourbar(label = FALSE,
                                ticks = FALSE))

Eliminar las etiquetas y las marcas (ticks) de una barra de color en ggplot2

Eliminar la leyenda

Por último, si quieres puedes puedes borrar la leyenda estableciendo su posición a "none".

# install.packages("ggplot2")
library(ggplot2)

ggplot(df, aes(x = x, y = y, fill = valor)) +
  geom_tile(color = "black") +
  coord_fixed() +
  theme(legend.position = "none")

Eliminar leyenda de un mapa de calor en ggplot2

ggplot2

Elegant Graphics for Data Analysis

Comprar en Amazon
Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon
Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon
Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon

También te puede interesar