Grouped violin plot with Seaborn

logo of a chart:Violin

A violin plot is a graphical representation employed to depict the distribution of a dataset, showcasing important statistics like the median, quartiles, and possible outliers. It offers a succinct summary of the central tendency and dispersion of the data.

In this post, we will explore how to use Seaborn to create a violin plot with 2 levels of hierarchy, meaning both groups and subgroups are available for each observation in the dataset.

Libraries

First, you need to install the following librairies:

# libraries
import seaborn as sns
import matplotlib.pyplot as plt

plt.rcParams['figure.dpi'] = 300

Dataset

The dataset we will use is the tips dataset, which we can easily download with seaborn:

In this dataset each row is a tip. For each tip we know the amount of the bill (total_bill) and several information like the day of the week (day) and if the customer was a smoker or not (smoker)

df = sns.load_dataset('tips')

Grouped violin plot

In order to create a violin plot with seaborn, we need to add to the hue argument the name of the categorical variable that will separate our subgroups.

  
sns.set_theme(style="darkgrid")
 
# Grouped violinplot
sns.violinplot(x="day", y="total_bill", hue="smoker", data=df, palette="Pastel1")
plt.show()

Inverting categorical variables

A potentially relevant thing to do is to invert the categorical variable on the x-axis and the one in the hue argument. The output graph will be quite different, and may make it easier to understand the distribution of the underlying variables.

  
sns.set_theme(style="darkgrid")
 
# Grouped violinplot
sns.violinplot(x="smoker", y="total_bill", hue="day", data=df, palette="Pastel1")
plt.show()

The split parameter

When using a hue variable, this determines whether the violins for different hue levels should be plotted on opposite sides of the main categorical axis.

# Grouped violinplot
sns.violinplot(x="smoker", y="total_bill", hue="day", data=df, palette="Pastel1", split=True)
plt.show()

Going further

This post explains how to create a grouped violin plot with seaborn.

For more examples of how to create or customize your violin plots, check the violin plot section. You may also be interested in how to customize a violin plot.

🚨 Grab the Data To Viz poster!


Do you know all the chart types? Do you know which one you should pick? I made a decision tree that answers those questions. You can download it for free!

    dataviz decision tree poster