Pandas & NumPy Academy · Lekcja

Wykresy kategoryczne: boxplot, barplot, violinplot

Porównuj rozkłady między grupami za pomocą wykresów pudełkowych i skrzypcowych, a średnie grup przedstawiaj z paskami błędów za pomocą barplot.

Lekcja 2 z 413 kroki

Wykresy kategoryczne: boxplot, barplot, violinplot to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Dlaczego wykresy do porównywania kategorii?

Gdy chcą Państwo porównać zmienną numeryczną w różnych kategoriach — na przykład napiwki otrzymane w poszczególne dni tygodnia albo ceny produktów według marki — potrzebne są wyspecjalizowane wykresy. Seaborn udostępnia trzy podstawowe wykresy do porównywania kategorii: boxplot, barplot i violinplot. Każdy z nich pokazuje inne aspekty rozkładu i nadaje się do innych celów analitycznych.

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

Box ploty z sns.boxplot

Box plot podsumowuje rozkład za pomocą pięciu statystyk: minimum, pierwszego kwartylu (Q1), mediany, trzeciego kwartylu (Q3) i maksimum (z wyłączeniem wartości odstających). Pudełko rozciąga się od Q1 do Q3 (czyli obejmuje rozstęp międzykwartylowy, IQR), linia wewnątrz pudełka oznacza medianę, a wąsy sięgają do wartości oddalonych o 1,5×IQR. Punkty poza wąsami są rysowane osobno jako wartości odstające. Box ploty doskonale nadają się do szybkiego wykrywania skośności i wartości odstających.

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

Dodawanie hue do box plotów

Parametr hue dzieli każdą kategorię na podgrupy wyświetlane obok siebie w różnych kolorach. Na przykład dodanie hue='smoker' do box plotu przedstawiającego zależność rachunku od dnia pokaże dwa pudełka dla każdego dnia — jedno dla osób palących i jedno dla osób niepalących. Ułatwia to czytelne porównanie trzech zmiennych bez konieczności używania faset. Aby zachować czytelność wykresu, należy użyć legendy.

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

Wykresy słupkowe z sns.barplot

sns.barplot() pokazuje średnią zmiennej numerycznej dla każdej kategorii, a słupki błędów domyślnie przedstawiają 95-procentowy przedział ufności (w starszych wersjach Seaborn obliczany metodą bootstrap, a w nowszych na podstawie błędu standardowego). W przeciwieństwie do histogramów wykresy słupkowe podsumowują każdą grupę jedną wartością — najlepiej sprawdzają się, gdy interesuje Państwa średnia i związana z nią niepewność, a nie pełny kształt rozkładu.

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

Wykresy skrzypcowe z sns.violinplot

Wykres skrzypcowy łączy box plot z krzywą KDE odbitą po obu stronach. Szerokość skrzypiec na danej wartości y oznacza gęstość danych w tym punkcie — szerokie fragmenty wskazują wiele obserwacji, a wąskie niewiele. Wykresy skrzypcowe przekazują więcej informacji niż box ploty, ponieważ pokazują, czy rozkład jest jednomodalny, czy wielomodalny, ale aby były miarodajne, wymagają większej liczby danych (zalecane jest n > 20 na grupę).

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

Parametr inner funkcji violinplot

Parametr inner funkcji violinplot określa, co zostanie narysowane wewnątrz kształtu skrzypiec. Dostępne opcje to 'box' (mały box plot), 'quartile' (poziome linie na poziomach Q1, mediany i Q3), 'point' (pojedyncze punkty danych) oraz 'stick' (pionowe znaczniki dla każdej obserwacji). Ustawienie inner=None rysuje wyłącznie obwiednię gęstości, bez wewnętrznych oznaczeń, zapewniając najczystszy wygląd przy porównywaniu wykresów obok siebie.

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

Łączenie strip plotów z box plotami i wykresami skrzypcowymi

Dodanie sns.stripplot() na box plocie lub wykresie skrzypcowym pokazuje każdą pojedynczą obserwację jako kropkę, dzięki czemu wartości odstające i małe liczebności próby nie pozostają ukryte. Ustawienie jitter=True rozsuwa punkty w poziomie, aby nie nakładały się na siebie, a ustawienie alpha sprawia, że przy dużej liczbie punktów stają się częściowo przezroczyste.

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

Wybór między boxplot, barplot i violinplot

Box plotu należy użyć, gdy trzeba zobaczyć mediany, IQR i wartości odstające, a liczebności próbek są umiarkowane. Wykresu słupkowego należy użyć, gdy odbiorców interesują średnie i przedziały ufności — jest to częste w raportach i na pulpitach nawigacyjnych. Wykresu skrzypcowego należy użyć, gdy chcą Państwo pokazać pełny kształt rozkładu, zwłaszcza jego wielomodalność. W przypadku małych zbiorów danych (n < 30 na grupę) lepiej użyć box plotów wraz ze strip plotami niż wykresów skrzypcowych, ponieważ krzywe KDE stają się niewiarygodne przy niewielkiej liczbie punktów.

catplot: interfejs na poziomie figury

sns.catplot() to opakowanie na poziomie figury dla wszystkich wykresów kategorycznych. Przekazanie kind='box', 'bar', 'violin', 'strip', 'swarm', 'count' lub 'point' pozwala przełączać typ wykresu. Jego najważniejszą zaletą są parametry col i row, które automatycznie tworzą siatkę podwykresów — na przykład osobne panele dla każdej płci lub pory dnia, bez ręcznego tworzenia 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()

Wykresy liczności dla tabel częstości

sns.countplot() pokazuje, ile obserwacji należy do każdej kategorii — jest to zasadniczo wykres słupkowy liczności. Odpowiada wywołaniu value_counts(), a następnie utworzeniu wykresu. Należy go użyć do wizualizacji niezrównoważenia klas w zbiorach danych, częstości wartości kategorycznych lub liczebności próby w każdej grupie przed wykonaniem dowolnego porównania rozkładów. Słupki można posortować według częstości za pomocą 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()

Wykresy punktowe do porównywania efektów

sns.pointplot() przedstawia średnią dla każdej kategorii jako kropkę i łączy kropki linią, ułatwiając dostrzeganie trendów w uporządkowanych kategoriach. Słupki błędów pokazują przedziały ufności. Jest to szczególnie użyteczne, gdy oś x reprezentuje uporządkowane grupy, takie jak przedziały wiekowe lub poziomy wykształcenia, a chcą Państwo podkreślić kierunek i skalę zmian między grupami, a nie tylko odizolowane średnie.

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

Szybkie sprawdzenie

Sprawdź swoje zrozumienie wykresów kategorycznych w Seaborn z tej lekcji.

Podsumowanie lekcji

W tej lekcji nauczyli się Państwo, że: sns.boxplot podsumowuje rozkłady za pomocą mediany, IQR i wartości odstających, sns.barplot pokazuje średnie grup wraz ze słupkami błędów oznaczającymi przedziały ufności, a sns.violinplot przedstawia pełny kształt rozkładu, w tym jego wielomodalność. W następnej części omówimy wykresy punktowe i wykresy par do wizualizacji zależności między zmiennymi numerycznymi.

Bezpłatny start

Ucz się Python dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Wykresy kategoryczne: boxplot, barplot, violinplot” jest bezpłatna?

Tak — pełny tekst „Wykresy kategoryczne: boxplot, barplot, violinplot” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wykresy kategoryczne: boxplot, barplot, violinplot”?

Porównuj rozkłady między grupami za pomocą wykresów pudełkowych i skrzypcowych, a średnie grup przedstawiaj z paskami błędów za pomocą barplot. Ćwiczysz Pandas & NumPy Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Pandas & NumPy Academy?

Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wykresy kategoryczne: boxplot, barplot, violinplot”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Pandas & NumPy Academy?

Tak. Każda lekcja Pandas & NumPy Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wykresy rozkładu: histplot i kdeplot
  2. Wykresy kategoryczne: boxplot, barplot, violinplot
  3. Wykresy punktowe i wykresy par
  4. Mapy cieplne macierzy korelacji
← Powrót do Pandas & NumPy Academy