Librería

vioplot

Autor principal

Tom Kelly

Es posible crear gráficos de violín donde cada uno de sus lados represente un subconjunto de datos distinto. Para ello tendrás que dividir tus datos y crear un violín con la función vioplot donde cada lado represente un subgrupo de los datos.

Sample data

Considera el conjunto de datos trees, que contiene tres variables numéricas con la circunferencia, altura y volumen de algunos árboles.

# Conjunto de datos
df <- trees

Comparación lado a lado

Divide el conjunto de datos en dos grupos, donde el primero corresponda con los árboles cuyo volumen sea superior a la media y el otro donde sea menor.

Luego, dibuja cada gráfico de violín especificando el lado que quieras con el argumento side. Tendrás que añadir add = TRUE en el segundo violín para que el nuevo lado se agregue sobre el primer gráfico.

Ten en cuenta que hemos usado plotCentre = "line", por lo que la media se muestra como una línea horizontal, ya que es lo más recomendable para este tipo de violines.

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

# Divide los datos en dos grupos
big_vol <- df[df$Volume >= mean(df$Volume), ]
small_vol <- df[df$Volume < mean(df$Volume), ]

# Dibuja cada lado
vioplot(big_vol,
        plotCentre = "line", # Mediana con una línea
        side = "right",   # Lado derecho
        col = "#5773CC")  # Color del lado derecho
vioplot(small_vol,
        plotCentre = "line", # Mediana con una línea
        side = "left",     # Lado izquierdo
        col = "#FFB900",   # Color del lado izquierdo
        add = TRUE)        # Sobre el gráfico anterior

legend("topleft",
       legend = c("Big", "Small"),
       fill = c("#5773CC", "#FFB900"))

Dividir gráfico de violín en R

A pesar de que no se recomienda, también puedes mostrar las medianas como puntos. Si quieres usar esta opción recuerda cambiar el color de los puntos con el argumento colMed.

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

# Divide los datos en dos grupos
big_vol <- df[df$Volume >= mean(df$Volume), ]
small_vol <- df[df$Volume < mean(df$Volume), ]

# Dibuja cada lado
vioplot(big_vol,
        colMed = "green", # Color del punto de la mediana
        side = "right",   # Lado derecho
        col = "#5773CC")  # Color del lado derecho
vioplot(small_vol,
        colMed = "green", # Color del punto de la mediana
        side = "left",    # Lado izquierdo
        col = "#FFB900",  # Color del lado izquierdo
        add = TRUE)       # Sobre el gráfico anterior

legend("topleft",
       legend = c("Big", "Small"),
       fill = c("#5773CC", "#FFB900"))

Gráfico de violín dividido con vioplot

También te puede interesar