El siguiente data frame contiene una columna con dos distribuciones con diferente media y la misma varianza y una variable categórica que representa qué observaciones corresponden a cada distribución.
set.seed(3)
x1 <- rnorm(500)
x2 <- rnorm(500, mean = 3)
x <- c(x1, x2)
grupo <- c(rep("G1", 500), rep("G2", 500))
df <- data.frame(x, group = grupo)
geom_histogram
Fill
Para crear un histograma por grupo en ggplot2 tendrás que pasar la variable numérica y la categórica a aes y usar geom_histogram de la siguiente manera.
# install.packages("ggplot2")
library(ggplot2)
# Histograma por grupo en ggplot2
ggplot(df, aes(x = x, fill = grupo)) +
geom_histogram()

Colour
También puedes pasar la variable categórica al argumento colour, de modo que los bordes de cada histograma sean de un color diferente.
# install.packages("ggplot2")
library(ggplot2)
# Histograma por grupo en ggplot2
ggplot(df, aes(x = x, colour = grupo)) +
geom_histogram()

Por defecto, si los histogramas se solapan, los valores se apilarán. Otra opción es cambiar la posición a identity (y usar colores con trasparencia) o a dodge como en los ejemplos siguientes.
Posición identity
Establecer position = "identity" es lo más recomendable en la mayoría de los casos, pero recuerda usar un color transparente con alpha para que ambos histogramas sean completamente visibles.
# install.packages("ggplot2")
library(ggplot2)
# Histograma por grupo en ggplot2
ggplot(df, aes(x = x, fill = grupo , colour = grupo)) +
geom_histogram(alpha = 0.5, position = "identity")

Posición dodge
Otra opción es usar position = "dodge", que agrega un espacio entre cada barra de forma que puedas ver ambos histogramas.
# install.packages("ggplot2")
library(ggplot2)
# Histograma por grupo en ggplot2
ggplot(df, aes(x = x, fill = grupo , colour = grupo)) +
geom_histogram(position = "dodge")


Color del borde
Si estableces fill dentro de aes pero no colour puedes cambiar el color del borde para todos los histogramas así como el ancho y tipo de línea con los argumentos de geom_histogram.
# install.packages("ggplot2")
library(ggplot2)
# Histograma por grupo en ggplot2
ggplot(df, aes(x = x, fill = grupo)) +
geom_histogram(colour = "black",
lwd = 0.75,
linetype = 1,
position = "identity")

Color de fondo
Si estableces colour pero no fill puedes cambiar el color de fondo de todos los histogramas con el argumento fill de geom_histogram.
# install.packages("ggplot2")
library(ggplot2)
# Histograma por grupo en ggplot2
ggplot(df, aes(x = x, colour = grupo)) +
geom_histogram(fill = "white",
position = "identity")

Personalizar el color del borde para cada grupo
El color de los bordes se puede personalizar para cada histograma con scale_color_manual. Si quieres usar una paleta predefinina puedes usar, por ejemplo, scale_color_brewer.
# install.packages("ggplot2")
library(ggplot2)
# Histograma por grupo en ggplot2
ggplot(df, aes(x = x, colour = grupo)) +
geom_histogram(fill = "white",
position = "identity") +
scale_color_manual(values = c("blue", "orange"))

Personalizar el color de fondo para cada grupo
De manera similar a personalizar los colores de los bordes, los colores de fondo se pueden cambiar con scale_fill_manual o una función equivalente.
# install.packages("ggplot2")
library(ggplot2)
# Histograma por grupo en ggplot2
ggplot(df, aes(x = x, fill = grupo)) +
geom_histogram(color = 1, alpha = 0.75,
position = "identity") +
scale_fill_manual(values = c("#8795E8", "#FF6AD5"))
Título de la leyenda
El título de la leyenda es el nombre de la columna de la variable categórica del conjunto de datos. Puedes cambiarlo con los argumentos fill y/o colour de la función guides. Como estamos pasando fill y colour a aes establecemos ambas para que no se creen dos leyendas.
# install.packages("ggplot2")
library(ggplot2)
# Histograma por grupo en ggplot2
ggplot(df, aes(x = x, fill = grupo , colour = grupo)) +
geom_histogram(alpha = 0.5, position = "identity") +
guides(fill = guide_legend(title = "Title"),
colour = guide_legend(title = "Title"))

Etiquetas de la leyenda
La leyenda mostrará por defecto los nombres de la variable categórica, pero puedes cambiarlos con scale_color_discrete y/o scale_fill_discrete. Ten en cuenta que esto dependerá del aes que establezcas.
# install.packages("ggplot2")
library(ggplot2)
# Histograma por grupo en ggplot2
ggplot(df, aes(x = x, fill = grupo , colour = grupo)) +
geom_histogram(alpha = 0.5, position = "identity") +
scale_color_discrete(labels = c("A", "B")) +
scale_fill_discrete(labels = c("A", "B"))

Posición de la leyenda
La posición por defecto de la leyenda es la derecha, pero puedes cambiarla con el componente legend.position de la función theme como en el ejemplo siguiente.
# install.packages("ggplot2")
library(ggplot2)
# Histograma por grupo en ggplot2
ggplot(df, aes(x = x, fill = grupo , colour = grupo)) +
geom_histogram(alpha = 0.5, position = "identity") +
theme(legend.position = "left") # Izquierda

Eliminar la leyenda
Estableciendo position = "none" se eliminará la leyenda por completo.
# install.packages("ggplot2")
library(ggplot2)
# Histograma por grupo en ggplot2
ggplot(df, aes(x = x, fill = grupo , colour = grupo)) +
geom_histogram(alpha = 0.5, position = "identity") +
theme(legend.position = "none")

También te puede interesar