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")

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 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")

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)

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)

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")


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
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)

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 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