sns.catplot()
Box plot to display data distribution and outliers across categories.
sns.catplot() is a flexible function in Seaborn that allows you to visualize categorical data in multiple ways. It combines various plot types under a single interface, making it easy to compare and explore data distributions.
General Syntax
sns.catplot(
    data,
    x=None,
    y=None,
    hue=None,
    col=None,
    row=None,
    kind='strip',
    height=5,
    aspect=1,
    order=None,
    hue_order=None,
    col_order=None,
    row_order=None,
    palette=None,
    margin_titles=False,
    legend_out=True,
    sharex=True,
    sharey=True,
    dodge=True
)All Supported Plot Types with kind
Sn  | kind  | Description  | 
1  | strip | Scatterplot for categorical data, with optional jitter.  | 
2  | swarm | Non-overlapping scatterplot.  | 
3  | box | Box plot showing medians, quartiles, and outliers.  | 
4  | violin | Combines box plot with KDE for distribution visualization.  | 
5  | boxen | Enhanced box plot optimized for large datasets.  | 
6  | bar | Bar plot showing the mean and confidence interval.  | 
7  | point | Point plot showing means with confidence intervals, connected by lines.  | 
8  | count | Bar plot of counts for each category (no  y variable required). | 
3. Dataset Setup
We will use the tips dataset for all examples.
import seaborn as sns
import matplotlib.pyplot as plt
# Load the dataset
data = sns.load_dataset('tips')
data.head()The tips dataset includes:
- sex: Gender of the customer.
 - smoker: Smoking status.
 - day: Day of the week.
 - time: Meal type (Lunch/Dinner).
 - size: Party size.
 - total_bill and tip: Bill and tip amounts.
 
total_bill  | tip  | sex  | smoker  | day  | time  | size  | |
0  | 16.99  | 1.01  | Female  | No  | Sun  | Dinner  | 2  | 
1  | 10.34  | 1.66  | Male  | No  | Sun  | Dinner  | 3  | 
2  | 21.01  | 3.50  | Male  | No  | Sun  | Dinner  | 3  | 
3  | 23.68  | 3.31  | Male  | No  | Sun  | Dinner  | 2  | 
4  | 24.59  | 3.61  | Female  | No  | Sun  | Dinner  | 4  | 
1. kind='strip'
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            kind='strip', 
            jitter=True)
            
plt.title("Strip Plot of Total Bill by Day")
plt.show()2. kind='swarm'
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            kind='swarm', 
            hue='sex')
            
plt.title("Swarm Plot of Total Bill by Day with Hue")
plt.show()3. kind='box'
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            kind='box', 
            hue='smoker')
            
plt.title("Box Plot of Total Bill by Day")
plt.show()if we want to remove the outlier from the chat, we use the   fliersize=0   as shown below 
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            kind='box', 
            hue='smoker',
              fliersize=0)
            
plt.title("Box Plot of Total Bill by Day")
plt.show()4. kind='violin'
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            kind='violin', 
            hue='smoker', 
            split=True)
            
plt.title("Violin Plot of Total Bill by Day")
plt.show()5. kind='boxen'
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            kind='boxen')
            
plt.title("Boxen Plot of Total Bill by Day")
plt.show(6. kind='bar'
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            kind='bar', 
            hue='time', 
            errorbar='sd')
plt.title("Bar Plot of Total Bill by Day")
plt.show()7. kind='point'
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            kind='point', 
            hue='time')
plt.title("Point Plot of Total Bill by Day")
plt.show()8. kind='count'
sns.catplot(data=data, 
            x='day', 
            kind='count', 
            hue='sex')
plt.title("Count Plot of Days with Hue")
plt.show()e. order and hue_order
Example: Custom order for day and smoker hue.
sns.catplot(
    data=data,
    x='day',
    y='total_bill',
    hue='smoker',
    kind='bar',
    order=['Sat', 'Sun', 'Thur', 'Fri'],
    hue_order=['Yes', 'No']
)
plt.show()f. palette
Example: Apply a custom color palette.
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            kind='bar', 
            hue='smoker', 
            palette='coolwarm')
plt.show()g. height and aspect
Example: Adjust the size of the plot.
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            kind='bar', 
            height=6, 
            aspect=1.5)
plt.show()h. margin_titles
Example: Place facet titles in margins.
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            col='sex', 
            kind='bar', 
            margin_titles=True)
plt.show()i. legend_out
Example: Keep the legend inside the plot.
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            kind='violin', 
            hue='smoker', 
            legend_out=False)
plt.show()j. sharex and sharey
Example: Allow different y-axis scales for each subplot.
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            col='time', 
            kind='bar', 
            sharey=False)
plt.show()k. dodge
Example: Separate hue categories for visibility.
sns.catplot(data=data, 
            x='day', 
            y='total_bill', 
            hue='sex', 
            kind='swarm', 
            dodge=True)
plt.show()5. Final Practice Example
Combine multiple parameters:
sns.catplot(
    data=data,
    x='day',
    y='total_bill',
    hue='smoker',
    col='sex',
    row='time',
    kind='bar',
    height=6,
    aspect=1.2,
    palette='muted',
    margin_titles=True,
    sharey=False
)
plt.show()