Datos de muestra

El conjunto de datos usado en los siguientes ejemplos es warpbreaks, que proporciona el número de roturas de urdimbre en un hilo, el tipo de lana y el nivel de tensión.

# Conjunto de datos de muestra
warpbreaks

Gráfico de violín con geom_violin

Un gráfico de violín por grupo se puede crear en ggplot pasando la variable numérica (breaks) y la categórica (tension) a aes y usando geom_violin.

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

ggplot(warpbreaks, aes(x = tension, y = breaks)) +
  geom_violin()

Violin plot por grupo en ggplot2

Gráfico de violín horizontal

Si quieres que el gráfico de violín sea horizontal en lugar de vertical puedes pasar la variable categórica (tension) a y o usar coord_flip, como en el ejemplo siguiente.

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

ggplot(warpbreaks, aes(x = tension, y = breaks)) +
  geom_violin() +
  coord_flip()

Gráfico de violín horizontal por grupo en ggplot2

Evitar recortar las colas

Por defecto, las colas de los violines se cortan en base al rango de los datos. Si quieres evitarlo establece trim = FALSE dentro de geom_violin.

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

ggplot(warpbreaks, aes(x = tension, y = breaks)) +
  geom_violin(trim = FALSE)

Gráfico de violín en ggplot2 sin colas recortadas

Añadir cuantiles

Puedes agregar los cuantiles que quieras pasando un vector al argumento draw_quantiles, como en el ejemplo siguiente.

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

ggplot(warpbreaks, aes(x = tension, y = breaks)) +
  geom_violin(trim = FALSE,
              draw_quantiles = c(0.25, 0.5, 0.75))

Añadir cuantiles y cuartiles a un diagrama de violín en ggplot2

Añadir box plots

Puedes superponer box plots a los gráficos para mostrar la mediana o los datos atípicos. Recuerda crear un box plot estrecho.

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

ggplot(warpbreaks, aes(x = tension, y = breaks)) +
  geom_violin(trim = FALSE) +
  geom_boxplot(width = 0.07)

Violin plot con box plot en ggplot2

Selección de ventana

Los gráficos de violín son estimaciones de densidad tipo núcleo de los datos, por lo que para su cálculo se necesita una ventana. La ventana por defecto se puede cambiar con bw.

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

ggplot(warpbreaks, aes(x = tension, y = breaks)) +
  geom_violin(trim = FALSE, bw = 10) +
  geom_boxplot(width = 0.07)

Selección de ventana violin plot en R

Color de fondo y del borde

Gráfico de violín colores por grupo

Color de fondo para cada grupo

Si quieres colorear los violines por grupo pasa la variable categórica al argumento fill de aes.

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

ggplot(warpbreaks, aes(x = tension, y = breaks, fill = tension)) +
  geom_violin(trim = FALSE) +
  geom_boxplot(width = 0.07)

Gráfico de violín agrupado en ggplot2

Color de fondo por subgrupo

Si tienes otra variable categórica puedes crear subgrupos y colorear las áreas en base a estos subgrupos.

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

ggplot(warpbreaks, aes(x = tension, y = breaks, fill = wool)) +
  geom_violin(trim = FALSE) +
  geom_boxplot(width = 0.07, position = position_dodge(width = 0.9))

Violin plot en ggplot2 con paleta de colores brewer

Escala de color

Los colores por defecto se pueden cambiar. Por ejemplo, puedes usar la paleta brewer de la siguiente manera:

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

ggplot(warpbreaks, aes(x = tension, y = breaks, fill = tension)) +
  geom_violin(trim = FALSE) + +
  geom_boxplot(width = 0.07)
  scale_fill_brewer()

Personalización del color de un gráfico de violín en R

Colores personalizados

Si quieres usar tu propia paleta de colores puedes usar scale_fill_manual y pasar los colores que quieras al argumento values.

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

ggplot(warpbreaks, aes(x = tension, y = breaks, fill = tension)) +
  geom_violin(trim = FALSE) + 
  geom_boxplot(width = 0.07) +
  scale_fill_manual(values = c("#BCE4D8", "#49A4B9", "#2C5985"))

Transparencia del gráfico de violín con geom_violin

Transparencia

La transparencia se puede modificar con el argumento alpha de la función geom_violin.

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

ggplot(warpbreaks, aes(x = tension, y = breaks, fill = tension)) +
  geom_violin(trim = FALSE,
              alpha = 0.5) +
  geom_boxplot(width = 0.07)

geom_violin color del borde

Color del borde

El argumento color de geom_violin se puede usar para cambiar el color de los bordes.

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

ggplot(warpbreaks, aes(x = tension, y = breaks, fill = tension)) +
  geom_violin(trim = FALSE,
              color = "blue") +
  geom_boxplot(width = 0.07)

Color del gráfico de violín por grupo en R

Color del borde por grupo

Sin embargo, si quieres establecer un color de borde basado en grupos, puedes pasar la variable categórica al argumento color de la función aes.

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

ggplot(warpbreaks, aes(x = tension, y = breaks, color = tension)) +
  geom_violin(trim = FALSE) +
  geom_boxplot(width = 0.07)

Personalizar el color del borde de un gráfico de violín en ggplot2

Colores de borde personalizados

De manera similar a cambiar los colores de fondo también puedes personalizar los colores del borde, pero con scale_color_manual.

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

ggplot(warpbreaks, aes(x = tension, y = breaks, color = tension)) +
  geom_violin(trim = FALSE) + 
  geom_boxplot(width = 0.07) +
  scale_color_manual(values = c("#F4D166", "#EC6E1C", "#B71D3E"))

Personalización de la leyenda

Título de la leyenda

El título de la leyenda muestra el nombre de la variable categórica. Para cambiar el título por defecto usa la función guides como se muestra en el ejemplo siguiente.

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

ggplot(warpbreaks, aes(x = tension, y = breaks, fill = tension)) +
  geom_violin(trim = FALSE) + 
  geom_boxplot(width = 0.07) +
  guides(fill = guide_legend(title = "Título"))

Cambiar el título de la leyenda de un gráfico de violín en ggplot2

Etiquetas

Las etiquetas de la leyenda son los nombres de los grupos. Estas etiquetas se pueden cambiar con scale_fill_manual si cambias los colores de fondo o con scale_fill_hue para cambiar solo las etiquetas.

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

ggplot(warpbreaks, aes(x = tension, y = breaks, fill = tension)) +
  geom_violin(trim = FALSE) + 
  geom_boxplot(width = 0.07) +
  scale_fill_hue(labels = c("G1", "G2", "G3"))

Cambiar las etiquetas de la leyenda de un gráfico de violín en ggplot2

Eliminar la leyenda

Por último, si quieres eliminar la leyenda puedes establecer su posición a "none" o añadir show.legend = FALSE a geom_violin y geom_boxplot (si lo añadiste).

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

ggplot(warpbreaks, aes(x = tension, y = breaks, fill = tension)) +
  geom_violin(trim = FALSE) + 
  geom_boxplot(width = 0.07) + 
  theme(legend.position = "none")

Eliminar la leyenda de un gráfico de violín en ggplot2

También te puede interesar