Pandas & NumPy Academy · Les

Categorische grafieken: boxplot, barplot, violinplot

Vergelijk verdelingen tussen groepen met boxplots en violinplots en geef groepsgemiddelden met foutbalken weer met barplot.

Les 2 van 413 stappen

Categorische grafieken: boxplot, barplot, violinplot is een gratis Pandas & NumPy Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Pandas & NumPy Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.

Waarom categorische vergelijkingsgrafieken?

Wanneer je een numerieke variabele tussen verschillende categorieën wilt vergelijken — bijvoorbeeld ontvangen fooien per dag van de week of productprijzen per merk — heb je gespecialiseerde grafieken nodig. Seaborn biedt drie essentiële categorische vergelijkingsgrafieken: boxplot, barplot en violinplot. Elke grafiek laat andere aspecten van de verdeling zien en is geschikt voor andere analysedoelen.

import seaborn as sns
import matplotlib.pyplot as plt

# Load the tips dataset — a classic Seaborn example
tips = sns.load_dataset('tips')
print(tips.groupby('day')['total_bill'].describe())

Boxplots met sns.boxplot

Een boxplot vat een verdeling samen met vijf statistieken: het minimum, het eerste kwartiel (Q1), de mediaan, het derde kwartiel (Q3) en het maximum (zonder uitschieters). De box loopt van Q1 tot Q3 (het interkwartielbereik, IQR), de lijn in de box is de mediaan en de snorharen lopen door tot 1,5×IQR. Punten buiten de snorharen worden afzonderlijk weergegeven als uitschieters. Boxplots zijn uitstekend geschikt om scheefheid en uitschieters in één oogopslag te herkennen.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.boxplot(data=tips, x='day', y='total_bill', order=['Thur', 'Fri', 'Sat', 'Sun'])
plt.title('Total Bill Distribution by Day')
plt.xlabel('Day')
plt.ylabel('Total Bill ($)')
plt.show()

Hue toevoegen aan boxplots

De parameter hue splitst elke categorie op in subgroepen die naast elkaar en in verschillende kleuren worden weergegeven. Als je bijvoorbeeld hue='smoker' toevoegt aan een boxplot van dag tegen rekeningbedrag, zie je twee boxplots per dag — één voor rokers en één voor niet-rokers. Zo kun je vergelijkingen met drie variabelen duidelijk weergeven zonder facetten te gebruiken. Gebruik een legenda om de grafiek leesbaar te houden.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.boxplot(
    data=tips,
    x='day',
    y='total_bill',
    hue='smoker',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    palette='Set2'
)
plt.title('Bill by Day and Smoker Status')
plt.legend(title='Smoker')
plt.show()

Staafdiagrammen met sns.barplot

sns.barplot() toont het gemiddelde van een numerieke variabele voor elke categorie, met foutbalken die standaard een betrouwbaarheidsinterval van 95% weergeven (berekend met bootstrapping in oudere versies van Seaborn of op basis van de standaardfout in nieuwere versies). In tegenstelling tot histogrammen vatten staafdiagrammen elke groep samen in één waarde — ze zijn het meest geschikt wanneer je geïnteresseerd bent in het gemiddelde en de onzekerheid daarvan, niet in de volledige vorm van de verdeling.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Show mean tip per day with 95% CI
sns.barplot(
    data=tips,
    x='day',
    y='tip',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    palette='Blues_d',
    errorbar='ci'
)
plt.title('Average Tip by Day (with 95% CI)')
plt.ylabel('Average Tip ($)')
plt.show()

Vioolplots met sns.violinplot

Een vioolplot combineert een boxplot met een KDE-curve die aan beide kanten gespiegeld wordt. De breedte van de viool bij elke y-waarde geeft de dichtheid van de gegevens op dat punt weer — brede delen bevatten veel waarnemingen, smalle delen weinig. Vioolplots geven meer informatie dan boxplots omdat ze laten zien of de verdeling unimodaal of multimodaal is, maar ze hebben meer gegevens nodig om betekenisvol te zijn (streef naar n > 20 per groep).

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.violinplot(
    data=tips,
    x='day',
    y='total_bill',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    palette='pastel',
    inner='quartile'  # show quartile lines inside the violin
)
plt.title('Bill Distribution by Day — Violin Plot')
plt.show()

De parameter inner van violinplot

De parameter inner van violinplot bepaalt wat er binnen de vioolvorm wordt getekend. Mogelijke opties zijn 'box' (een kleine boxplot), 'quartile' (horizontale lijnen bij Q1, de mediaan en Q3), 'point' (afzonderlijke gegevenspunten) en 'stick' (verticale markeringen per waarneming). Met inner=None teken je alleen de dichtheidsenvelop zonder interne markeringen, voor de meest overzichtelijke weergave bij vergelijkingen naast elkaar.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

sns.violinplot(data=tips, x='smoker', y='tip',
               inner='box', ax=axes[0])
axes[0].set_title('inner="box"')

sns.violinplot(data=tips, x='smoker', y='tip',
               inner='point', ax=axes[1])
axes[1].set_title('inner="point"')

plt.tight_layout()
plt.show()

Stripplots combineren met boxplots/vioolplots

Door een sns.stripplot() boven op een boxplot of vioolplot te leggen, geef je elk afzonderlijk gegevenspunt weer als een stip. Zo voorkom je dat uitschieters en kleine steekproeven verborgen blijven. Stel jitter=True in om punten horizontaal te spreiden zodat ze niet allemaal op elkaar worden gestapeld, en stel alpha in om ze half transparant te maken wanneer er veel punten zijn.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

ax = sns.boxplot(data=tips, x='day', y='tip',
                 order=['Thur', 'Fri', 'Sat', 'Sun'],
                 palette='Set3', width=0.5)

# Overlay individual points
sns.stripplot(data=tips, x='day', y='tip',
              order=['Thur', 'Fri', 'Sat', 'Sun'],
              color='black', alpha=0.3, jitter=True, size=3, ax=ax)

plt.title('Tip Distribution with Raw Points')
plt.show()

Kiezen tussen boxplot, barplot en violinplot

Gebruik een boxplot wanneer je medianen, IQR en uitschieters wilt zien en de steekproefomvang gemiddeld is. Gebruik een staafdiagram wanneer je publiek geïnteresseerd is in gemiddelden en betrouwbaarheidsintervallen (wat vaak voorkomt in rapporten en dashboards). Gebruik een vioolplot wanneer je de volledige vorm van de verdeling wilt onthullen — vooral multimodaliteit. Gebruik bij kleine gegevensverzamelingen (n < 30 per groep) liever boxplots in combinatie met stripplots dan vioolplots, omdat KDE-curven bij weinig punten onbetrouwbaar worden.

catplot: de interface op figuurniveau

sns.catplot() is de wrapper op figuurniveau voor alle categorische grafieken. Geef kind='box', 'bar', 'violin', 'strip', 'swarm', 'count' of 'point' door om van grafiektype te wisselen. Het belangrijkste voordeel zijn de parameters col en row, waarmee automatisch een raster van deelgrafieken wordt gemaakt — bijvoorbeeld afzonderlijke panelen per geslacht of moment van de dag, zonder handmatig plt.subplots te maken.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Faceted box plots: separate panel per time of day
sns.catplot(
    data=tips,
    x='day',
    y='total_bill',
    col='time',
    kind='box',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    height=5,
    aspect=0.8
)
plt.suptitle('Bill by Day, Faceted by Time', y=1.02)
plt.show()

Countplots voor frequentietabellen

sns.countplot() laat zien hoeveel waarnemingen in elke categorie vallen — in wezen een staafdiagram van aantallen. Het is gelijkwaardig aan het aanroepen van value_counts() en het daarna tekenen van de uitkomst. Gebruik het om klassenonevenwicht in gegevensverzamelingen, de frequentie van categorische waarden of de steekproefomvang per groep zichtbaar te maken voordat je een verdelingsvergelijking uitvoert. Sorteer staven op frequentie met order=df['col'].value_counts().index.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Count by day, sorted by frequency
day_order = tips['day'].value_counts().index

sns.countplot(data=tips, x='day', order=day_order, palette='viridis')
plt.title('Number of Observations per Day')
plt.ylabel('Count')
plt.show()

Puntgrafieken voor effectvergelijking

sns.pointplot() tekent het gemiddelde voor elke categorie als een stip en verbindt de stippen met een lijn. Zo zie je gemakkelijk trends over geordende categorieën. Foutbalken tonen betrouwbaarheidsintervallen. Dit is vooral nuttig wanneer de x-as geordende groepen weergeeft, zoals leeftijdsgroepen of opleidingsniveaus, en je de richting en omvang van de verandering tussen groepen wilt benadrukken in plaats van alleen afzonderlijke gemiddelden.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.pointplot(
    data=tips,
    x='day',
    y='tip',
    hue='smoker',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    dodge=True,
    capsize=0.1
)
plt.title('Mean Tip by Day and Smoker Status')
plt.show()

Snelle controle

Test je begrip van de categorische grafieken van Seaborn uit deze les.

Samenvatting van de les

In deze les heb je geleerd dat sns.boxplot verdelingen samenvat met de mediaan, IQR en uitschieters, dat sns.barplot groepsgemiddelden met foutbalken voor betrouwbaarheidsintervallen toont, en dat sns.violinplot de volledige vorm van de verdeling onthult, inclusief multimodaliteit. Hierna verkennen we spreidingsdiagrammen en paardiagrammen om relaties tussen numerieke variabelen zichtbaar te maken.

Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “Categorische grafieken: boxplot, barplot, violinplot” gratis?

Ja — de volledige tekst van “Categorische grafieken: boxplot, barplot, violinplot” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Pandas & NumPy Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.

Wat leer ik in “Categorische grafieken: boxplot, barplot, violinplot”?

Vergelijk verdelingen tussen groepen met boxplots en violinplots en geef groepsgemiddelden met foutbalken weer met barplot. Je oefent met Pandas & NumPy Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Pandas & NumPy Academy te beginnen?

Ervaring vooraf is niet nodig. Pandas & NumPy Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Categorische grafieken: boxplot, barplot, violinplot”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Pandas & NumPy Academy?

Ja. Elke les over Pandas & NumPy Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Verdelingsgrafieken: histplot en kdeplot
  2. Categorische grafieken: boxplot, barplot, violinplot
  3. Spreidingsgrafieken en pairplots
  4. Heatmaps voor correlatiematrices
← Terug naar Pandas & NumPy Academy