How can box plot be overlaid on top of swarm plot in Seaborn?

Overlaying a box plot on top of a swarm plot in Seaborn creates an effective visualization that combines individual data points with summary statistics. The swarm plot shows each data point while the box plot provides quartile information and outliers.

Basic Overlay Example

Here's how to create a box plot overlaid on a swarm plot using sample data ?

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# Set figure size
plt.rcParams["figure.figsize"] = [8, 5]
plt.rcParams["figure.autolayout"] = True

# Create sample data
np.random.seed(42)
data = pd.DataFrame({
    "Category": ["A", "B", "C"] * 50,
    "Values": np.concatenate([
        np.random.normal(10, 2, 50),
        np.random.normal(15, 3, 50), 
        np.random.normal(12, 1.5, 50)
    ])
})

# Create swarm plot first
ax = sns.swarmplot(x="Category", y="Values", data=data, size=4)

# Overlay box plot with transparent boxes
sns.boxplot(x="Category", y="Values", data=data, 
            showcaps=False, 
            boxprops={'facecolor': 'None', 'edgecolor': 'black'}, 
            showfliers=False, 
            whiskerprops={'linewidth': 2}, 
            medianprops={'linewidth': 2, 'color': 'red'},
            ax=ax)

plt.title("Box Plot Overlaid on Swarm Plot")
plt.show()
[A visualization showing individual data points from swarm plot with box plot statistics overlaid]

Customizing the Overlay

You can customize colors, transparency, and styling for better visual appeal ?

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# Create more realistic dataset
np.random.seed(123)
tips = sns.load_dataset("tips")

# Create the plot
fig, ax = plt.subplots(figsize=(10, 6))

# Swarm plot with custom colors
sns.swarmplot(x="day", y="total_bill", data=tips, 
              palette="Set2", alpha=0.7, size=5, ax=ax)

# Box plot overlay with custom styling
sns.boxplot(x="day", y="total_bill", data=tips,
            boxprops={'facecolor': 'None', 'edgecolor': 'black', 'linewidth': 2},
            medianprops={'color': 'red', 'linewidth': 2},
            whiskerprops={'linewidth': 2, 'color': 'black'},
            capprops={'linewidth': 2, 'color': 'black'},
            showfliers=False,
            ax=ax)

plt.title("Restaurant Bills by Day of Week", fontsize=14, fontweight='bold')
plt.xlabel("Day of Week", fontsize=12)
plt.ylabel("Total Bill ($)", fontsize=12)
plt.show()
[A visualization showing restaurant bill data with swarm plot points and box plot statistics]

Key Parameters for Overlay

Parameter Purpose Common Values
facecolor Box fill color 'None' for transparent
showfliers Show outlier points False (swarm shows all points)
showcaps Show whisker caps True/False based on preference
zorder Layer ordering Higher values appear on top

Best Practices

When overlaying plots, consider these guidelines ?

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# Load iris dataset for demonstration
iris = sns.load_dataset("iris")

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))

# Poor overlay - boxes obscure points
sns.swarmplot(x="species", y="sepal_length", data=iris, ax=ax1)
sns.boxplot(x="species", y="sepal_length", data=iris, ax=ax1)
ax1.set_title("Poor Overlay - Boxes Hide Points")

# Good overlay - transparent boxes, styled properly  
sns.swarmplot(x="species", y="sepal_length", data=iris, 
              palette="viridis", alpha=0.8, ax=ax2)
sns.boxplot(x="species", y="sepal_length", data=iris,
            boxprops={'facecolor': 'None', 'linewidth': 1.5},
            medianprops={'color': 'red', 'linewidth': 2},
            showfliers=False, ax=ax2)
ax2.set_title("Good Overlay - Clear Visibility")

plt.tight_layout()
plt.show()
[Two side-by-side plots showing poor vs good overlay techniques]

Conclusion

Overlaying box plots on swarm plots combines individual data points with statistical summaries effectively. Use transparent boxes with facecolor='None' and disable outliers in box plots since swarm plots already show all points. This technique provides both detailed and summary views of your data distribution.

Updated on: 2026-03-25T23:52:43+05:30

583 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements