Librería

ggExtra

Autor principal

Dean Attali

Agregando histogramas marginales con ggExtra

La función ggMarginal del paquete ggExtra permite añadir histogramas marginales a un gráfico de dispersión ya creado. Para tal propósito tendrás que guardar el diagrama de dispersión hecho con ggplot2 dentro de una variable y pasarlo a ggMarginal, especificando type = "histogram".

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

# Guarda el gráfico de dispersión en una variable
p <- ggplot(cars, aes(x = speed, y = dist)) +
  geom_point()

# Crea el gráfico con histogramas marginales
ggMarginal(p, type = "histogram")

Gráfico de dispersión con histogramas marginales en ggplot2

Histograma solo en el eje X

El argumento margins puede ser usado para añadir solo uno de los histogramas marginales, en este caso el del eje X.

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

# Guarda el gráfico de dispersión en una variable
p <- ggplot(cars, aes(x = speed, y = dist)) +
  geom_point()

# Histograma marginal horizontal
ggMarginal(p, type = "histogram", 
           margins = "x")

Histograma marginal en el eje X

Histograma solo en el eje vertical

Si prefieres mostrar únicamente el histograma del eje Y establece margins = "y".

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

# Guarda el gráfico de dispersión en una variable
p <- ggplot(cars, aes(x = speed, y = dist)) +
  geom_point()

# Histograma marginal vertical
ggMarginal(p, type = "histogram", 
           margins = "y")

Diagrama de dispersión con histograma marginal en el eje vertical

Tamaño relativo

El argumento size modifica el tamaño relativo entre los histogramas y el gráfico de dispersión. El valor por defecto es 5 (el gráfico de dispersión es 5 veces más grande que los histogramas).

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

# Guarda el gráfico de dispersión en una variable
p <- ggplot(cars, aes(x = speed, y = dist)) +
  geom_point()

# Cambiando el tamaño relativo
ggMarginal(p, type = "histogram", 
           size = 3)

Tamaño relativo de los histogramas marginales

Argumentos a ser pasados a geom_boxplot

Puedes pasar argumentos a la función geom_boxplot. Si quieres establecer argumentos para cada histograma pasa una lista a xparams e yparams.

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

# Guarda el gráfico de dispersión en una variable
p <- ggplot(cars, aes(x = speed, y = dist)) +
  geom_point()

# Personalización barras
ggMarginal(p, type = "histogram", 
           binwidth = 4)

Personalización de los histogramas marginales en ggplot2

Histograma con curvas de densidad

Si quieres superponer las curvas de densidad de los histogramas usa type = "densigram".

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

# Guarda el gráfico de dispersión en una variable
p <- ggplot(cars, aes(x = speed, y = dist)) +
  geom_point()

# Densigrama
ggMarginal(p, type = "densigram")

Histogramas marginales con curvas de densidad en ggplot2

Personalización del color

Color de los histogramas marginales

Color de fondo

Cambia el color de fondo de los histogramas con fill.

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

# Guarda el gráfico de dispersión en una variable
p <- ggplot(cars, aes(x = speed, y = dist)) +
  geom_point()

# Cambiando el color de fondo
ggMarginal(p, type = "histogram", 
           fill = 4)

Color del borde de los histogramas marginales en ggplot2

Color del borde

También puedes personalizar el color del borde con el argumento col.

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

# Guarda el gráfico de dispersión en una variable
p <- ggplot(cars, aes(x = speed, y = dist)) +
  geom_point()

# Color de fondo y de borde de los histogramas marginales
ggMarginal(p, type = "histogram", 
           fill = "white",
           col = 4)

Personalización de cada histograma marginal

Argumentos para cada histograma

Si quieres personalizar cada histograma por separado, pasa una lista de argumentos para cada eje con xparams e yparams.

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

# Guarda el gráfico de dispersión en una variable
p <- ggplot(cars, aes(x = speed, y = dist)) +
  geom_point()

# Argumentos para cada histograma marginal
ggMarginal(p, type = "histogram", 
           xparams = list(fill = 4),
           yparams = list(fill = 3))

Histogramas marginales por grupo en ggplot2

Histogramas por grupo

Por último, si tu conjunto de datos contiene una variable categórica que representa grupos puedes crear histogramas para cada grupo en cada margen.

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

# Variable categórica de ejemplo
cars$grupo <- c(rep("A", 25), rep("B", 25))

# Guarda el gráfico de dispersión en una variable
p <- ggplot(cars, aes(x = speed, y = dist, color = grupo)) +
  geom_point()

# Histogramas marginales por grupo
ggMarginal(p, type = "histogram", 
           groupColour = TRUE,
           groupFill = TRUE)

También te puede interesar