Pandas & NumPy Academy · Lektion

Kategoriska diagram: boxplot, barplot, violinplot

Jämför fördelningar mellan grupper med låddiagram och violinplot och visa gruppmedelvärden med felstaplar med barplot.

Lektion 2 av 413 steg

Kategoriska diagram: boxplot, barplot, violinplot är en gratis lektion i Pandas & NumPy Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Pandas & NumPy Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Varför kategoriska jämförelsediagram?

När Ni vill jämföra en numerisk variabel mellan olika kategorier – till exempel dricks per veckodag eller produktpriser per varumärke – behöver Ni specialiserade diagram. Seaborn tillhandahåller tre viktiga kategoriska jämförelsediagram: boxplot, barplot och violinplot. Varje diagram visar olika aspekter av fördelningen och passar för olika analytiska mål.

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

Boxdiagram med sns.boxplot

Ett boxdiagram sammanfattar en fördelning med hjälp av fem statistiska mått: minimum, första kvartilen (Q1), medianen, tredje kvartilen (Q3) och maximum (exklusive avvikare). Lådan sträcker sig från Q1 till Q3 (interkvartilavståndet, IQR), linjen i lådan är medianen och whiskers sträcker sig till 1,5×IQR. Punkter utanför whiskers visas separat som avvikare. Boxdiagram är utmärkta för att snabbt upptäcka snedhet och avvikare.

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

Lägga till hue i boxdiagram

Parametern hue delar upp varje kategori i undergrupper som visas sida vid sida med olika färger. Om Ni till exempel lägger till hue='smoker' i ett boxdiagram över dag och nota visas två lådor per dag – en för rökare och en för icke-rökare. Det gör jämförelser mellan tre variabler tydliga utan att Ni behöver använda fasetter. Använd en förklaring för att hålla diagrammet lättläst.

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

Stapeldiagram med sns.barplot

sns.barplot() visar medelvärdet för en numerisk variabel i varje kategori, med felstaplar som standard representerar ett 95-procentigt konfidensintervall (beräknat med bootstrapping i äldre Seaborn-versioner eller från standardfelet i nyare versioner). Till skillnad från histogram sammanfattar stapeldiagram varje grupp med ett enda värde – de passar bäst när Ni är intresserad av genomsnittet och dess osäkerhet, inte av hela fördelningens form.

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

Violindiagram med sns.violinplot

Ett violindiagram kombinerar ett boxdiagram med en KDE-kurva som speglas på båda sidor. Violins bredd vid varje y-värde representerar datans täthet vid den punkten – breda avsnitt innehåller många observationer och smala avsnitt få. Violindiagram förmedlar mer information än boxdiagram eftersom de visar om fördelningen är unimodal eller multimodal, men de kräver mer data för att bli meningsfulla (sikta på n > 20 per grupp).

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

Parametern inner i violinplot

Parametern inner i violinplot styr vad som ritas inuti violinformen. Alternativen omfattar 'box' (ett litet boxdiagram), 'quartile' (horisontella linjer vid Q1, medianen och Q3), 'point' (enskilda datapunkter) och 'stick' (vertikala markeringar för varje observation). Om Ni anger inner=None ritas endast täthetsformen utan interna markeringar, vilket ger ett renast utseende vid jämförelser sida vid sida.

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

Kombinera stripdiagram med box- och violindiagram

Om Ni lägger till ett sns.stripplot() ovanpå ett box- eller violindiagram visas varje enskild datapunkt som en prick, vilket förhindrar att avvikare och små stickprov döljs. Ange jitter=True för att sprida punkterna horisontellt så att de inte staplas ovanpå varandra, och ange alpha för att göra dem halvtransparenta när det finns många punkter.

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

Välja mellan boxplot, barplot och violinplot

Använd ett boxdiagram när Ni behöver se medianer, IQR och avvikare och stickprovsstorlekarna är måttliga. Använd ett stapeldiagram när målgruppen är intresserad av medelvärden och konfidensintervall, vilket är vanligt i rapporter och instrumentpaneler. Använd ett violindiagram när Ni vill visa hela fördelningens form – särskilt multimodalitet. För små datamängder (n < 30 per grupp) bör Ni föredra boxdiagram med stripdiagram framför violindiagram, eftersom KDE-kurvor blir opålitliga med få punkter.

catplot: gränssnittet på figurnivå

sns.catplot() är omslaget på figurnivå för alla kategoriska diagram. Ange kind='box', 'bar', 'violin', 'strip', 'swarm', 'count' eller 'point' för att byta diagramtyp. Den viktigaste fördelen är parametrarna col och row, som automatiskt skapar ett rutnät med deldiagram – till exempel separata paneler för kön eller tid på dagen utan att Ni manuellt behöver skapa plt.subplots.

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

Antalsdiagram för frekvenstabeller

sns.countplot() visar hur många observationer som tillhör varje kategori – i praktiken ett stapeldiagram över antal. Det motsvarar att anropa value_counts() och sedan rita resultatet. Använd det för att visualisera obalans mellan klasser i datamängder, frekvensen för kategoriska värden eller stickprovsstorleken per grupp innan Ni gör någon jämförelse av fördelningar. Sortera staplarna efter frekvens med 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()

Punktdiagram för effektjämförelser

sns.pointplot() ritar medelvärdet för varje kategori som en punkt och förbinder punkterna med en linje, vilket gör det enkelt att se trender över ordnade kategorier. Felstaplarna visar konfidensintervall. Detta är särskilt användbart när x-axeln representerar ordnade grupper, till exempel åldersintervall eller utbildningsnivåer, och Ni vill framhäva förändringens riktning och storlek mellan grupper snarare än enbart isolerade medelvärden.

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

Snabbkontroll

Testa Er förståelse av Seaborns kategoriska diagram från den här lektionen.

Sammanfattning av lektionen

I den här lektionen har Ni lärt Er att sns.boxplot sammanfattar fördelningar med median, IQR och avvikare, att sns.barplot visar gruppmedelvärden med felstaplar för konfidensintervall och att sns.violinplot visar hela fördelningens form, inklusive multimodalitet. Härnäst utforskar vi spridningsdiagram och parvisa diagram för att visualisera samband mellan numeriska variabler.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”Kategoriska diagram: boxplot, barplot, violinplot” gratis?

Ja – hela texten till ”Kategoriska diagram: boxplot, barplot, violinplot” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Pandas & NumPy Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Kategoriska diagram: boxplot, barplot, violinplot”?

Jämför fördelningar mellan grupper med låddiagram och violinplot och visa gruppmedelvärden med felstaplar med barplot. Ni övar på Pandas & NumPy Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Pandas & NumPy Academy?

Du behöver inga förkunskaper. Utbildningen i Pandas & NumPy Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Kategoriska diagram: boxplot, barplot, violinplot”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Pandas & NumPy Academy-lektionen?

Ja. Varje Pandas & NumPy Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Fördelningsdiagram: histplot och kdeplot
  2. Kategoriska diagram: boxplot, barplot, violinplot
  3. Punktdiagram och parvisa diagram
  4. Värmekartor för korrelationsmatriser
← Tillbaka till Pandas & NumPy Academy