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

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

También te puede interesar