Datos de muestra

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)

Histograma por grupo con 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()

Histograma por grupo en ggplot2

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

Dos histogramas en el mismo gráfico en ggplot2

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

Histogramas posición 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")

Histogramas dodge ggplot2

Personalizar los colores

Color del borde del histograma en ggplot2

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 de un histograma en ggplot2

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

Color de los bordes para cada histograma en ggplot2

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

Color de fondo para cada histograma en ggplot2

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

Personalizar la leyenda

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

Cambiar el título de la leyenda de un histograma en ggplot2

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

Cambiar las etiquetas de un histograma en ggplot2

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

Posición de la leyenda de un histograma

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

Eliminar la leyenda de un histograma de ggplot2

También te puede interesar