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")
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()
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()
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()
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()
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
.
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()
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()
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()
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))
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"))
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 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")
También te puede interesar