0Pricing
Pandas & NumPy Academy · Lekcja

Wykresy punktowe i wykresy par

Twórz wykresy punktowe pokolorowane według trzeciej zmiennej za pomocą sns.scatterplot i wizualizuj wszystkie zależności parami za pomocą sns.pairplot.

Wykresy punktowe i wykresy par to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 3 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.

Wizualizacja zależności między zmiennymi

Wykresy rozkładu pokazują jedną zmienną naraz. Aby zrozumieć zależność między dwiema zmiennymi numerycznymi, potrzebują Państwo wykresów punktowych i powiązanych wizualizacji. Pomagają one wykrywać korelację (czy obie zmienne rosną razem?), skupienia (czy w danych znajdują się podgrupy?) oraz wartości odstające (czy występują nietypowe punkty oddalone od głównego skupiska?). Seaborn ułatwia to wszystko za pomocą scatterplot i pairplot.

import seaborn as sns
import matplotlib.pyplot as plt

# Load the classic iris dataset
iris = sns.load_dataset('iris')
print(iris.head())
print('\nShape:', iris.shape)

Podstawowy wykres punktowy z sns.scatterplot

sns.scatterplot(data, x, y) przedstawia każdą obserwację jako punkt o współrzędnych (x, y). W przeciwieństwie do plt.scatter z Matplotlib wersja Seaborn automatycznie korzysta z ramki danych i integruje się z semantykami hue, size i style. Rezultatem są informacyjne wykresy wielowymiarowe utworzone za pomocą jednego wywołania funkcji i automatycznej legendy.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.scatterplot(data=tips, x='total_bill', y='tip')
plt.title('Tip vs Total Bill')
plt.xlabel('Total Bill ($)')
plt.ylabel('Tip ($)')
plt.show()

Kodowanie trzeciej zmiennej za pomocą hue

Parametr hue przypisuje każdemu punktowi kolor na podstawie trzeciej zmiennej — kategorycznej lub numerycznej. Gdy hue wskazuje kolumnę kategoryczną (np. 'smoker'), Seaborn używa rozróżnialnych kolorów. Gdy hue wskazuje kolumnę numeryczną, używana jest sekwencyjna mapa kolorów. Pozwala to jednocześnie obserwować trzy zmienne na wykresie 2D bez dodawania trzeciej osi.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.scatterplot(
    data=tips,
    x='total_bill',
    y='tip',
    hue='time',       # Lunch vs Dinner
    style='smoker',   # marker shape
    palette='deep'
)
plt.title('Tip vs Bill by Time and Smoker Status')
plt.legend(bbox_to_anchor=(1, 1))
plt.tight_layout()
plt.show()

Kodowanie rozmiaru i stylu

Oprócz hue wykresy punktowe Seaborn obsługują size (pole punktu koduje zmienną numeryczną) oraz style (kształt znacznika koduje zmienną kategoryczną). Jednoczesne użycie wszystkich trzech semantyk może ujawnić złożone wzorce wielowymiarowe, ale grozi przeciążeniem odbiorcy. Praktyczna zasada to używać najpierw hue (najbardziej zauważalnego), następnie style, a size tylko wtedy, gdy jest to konieczne.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.scatterplot(
    data=tips,
    x='total_bill',
    y='tip',
    hue='day',
    size='size',      # party size controls marker area
    sizes=(20, 200),  # min and max dot area
    alpha=0.7
)
plt.title('Tip vs Bill — Colour=Day, Size=Party Size')
plt.legend(bbox_to_anchor=(1, 1))
plt.tight_layout()
plt.show()

Dodawanie linii regresji za pomocą regplot

sns.regplot() rysuje wykres punktowy i nakłada na niego linię regresji liniowej z zacienionym 95-procentowym pasmem ufności. Jest to przydatne do wizualizacji siły i kierunku liniowej zależności między dwiema zmiennymi. Pasmo ufności zwęża się w obszarach z dużą gęstością danych i rozszerza na krańcach, gdzie dopasowanie opiera się na mniejszej liczbie punktów.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.regplot(
    data=tips,
    x='total_bill',
    y='tip',
    scatter_kws={'alpha': 0.4},
    line_kws={'color': 'red'}
)
plt.title('Tip vs Bill with Regression Line')
plt.show()

lmplot: fasetowane wykresy regresji

sns.lmplot() to wersja regplot działająca na poziomie figury. Obsługuje hue (osobne linie regresji dla grup na tym samym panelu) oraz col/row (osobne panele). Jest to przydatne przy sprawdzaniu, czy zależność między dwiema zmiennymi różni się w podgrupach — na przykład czy zależność między rachunkiem a napiwkiem jest silniejsza podczas kolacji niż podczas lunchu.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Separate regression line per time (Lunch / Dinner)
sns.lmplot(
    data=tips,
    x='total_bill',
    y='tip',
    hue='time',
    scatter_kws={'alpha': 0.4},
    height=5
)
plt.suptitle('Regression by Meal Time', y=1.02)
plt.show()

Wprowadzenie do wykresów par

sns.pairplot(df) tworzy siatkę wykresów punktowych dla każdej pary kolumn numerycznych w ramce danych, a na przekątnej umieszcza wykresy rozkładu. Jest to najszybszy sposób na wizualizację wszystkich zależności parami w zbiorze danych za pomocą jednego wywołania. Dla ramki danych zawierającej n kolumn numerycznych pairplot tworzy siatkę n×n. Rozwiązanie jest najbardziej praktyczne, gdy n wynosi od 3 do 8 — większe siatki stają się zbyt małe, aby można je było czytelnie odczytać.

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset('iris')

# Create pairplot coloured by species
sns.pairplot(iris, hue='species', diag_kind='kde', plot_kws={'alpha': 0.5})
plt.suptitle('Iris Dataset Pairplot', y=1.02)
plt.show()

Dostosowywanie przekątnej pairplot

Parametr diag_kind określa, co pojawia się na przekątnej siatki pairplot. Wartość 'hist' służy do wyświetlania histogramów, a 'kde' do estymacji gęstości jądrowej. Przekątna pokazuje rozkład jednowymiarowy każdej zmiennej, natomiast panele poza przekątną przedstawiają wykresy punktowe par zmiennych. Można również użyć corner=True, aby wyświetlić tylko dolny trójkąt, zmniejszając o połowę liczbę paneli i ograniczając powtórzenia.

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset('iris')

# Show only lower triangle
sns.pairplot(
    iris,
    hue='species',
    diag_kind='hist',
    corner=True
)
plt.show()

PairGrid do pełnego dostosowywania

sns.PairGrid zapewnia pełną kontrolę nad typem wykresu pojawiającego się w każdej części macierzy. Za pomocą g.map_upper(), g.map_lower() i g.map_diag() można przypisać różne funkcje (np. regplot do górnego trójkąta i kdeplot do dolnego). Powstają w ten sposób wykresy wysokiej jakości, odpowiednie do publikacji, w których każdy panel przedstawia odrębne informacje o parze zmiennych.

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset('iris')
numeric_iris = iris.drop(columns=['species'])

g = sns.PairGrid(numeric_iris)
g.map_upper(sns.scatterplot, alpha=0.3)
g.map_lower(sns.kdeplot, fill=True)
g.map_diag(sns.histplot, kde=True)

plt.suptitle('Custom PairGrid', y=1.02)
plt.show()

Rozpoznawanie korelacji na wykresach punktowych

Odczytując wykres punktowy, należy oszacować kierunek (czy chmura punktów opada, czy rośnie?), siłę (jak ściśle punkty skupiają się wokół trendu?) oraz postać (liniowa czy krzywoliniowa?) zależności. Współczynnik korelacji r przyjmuje wartości od -1 (idealna korelacja ujemna) do +1 (idealna korelacja dodatnia), a 0 oznacza brak zależności liniowej. Należy pamiętać, że korelacja nie oznacza związku przyczynowego, a zależność nieliniowa może mieć r ≈ 0.

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

np.random.seed(0)
x = np.linspace(0, 10, 100)

fig, axes = plt.subplots(1, 3, figsize=(12, 4))

# Strong positive correlation
axes[0].scatter(x, x + np.random.normal(0, 0.5, 100))
axes[0].set_title('Strong Positive (r≈0.99)')

# Weak correlation
axes[1].scatter(x, np.random.normal(5, 3, 100))
axes[1].set_title('No Correlation (r≈0)')

# Non-linear (quadratic) — r can be low
axes[2].scatter(x, (x-5)**2 + np.random.normal(0, 1, 100))
axes[2].set_title('Non-linear (r low despite pattern)')

plt.tight_layout()
plt.show()

jointplot dla danych dwuwymiarowych z rozkładami brzegowymi

sns.jointplot() łączy centralny wykres dwuwymiarowy z jednowymiarowymi wykresami rozkładów na górnej i prawej krawędzi. Należy przekazać parametr kind='scatter', 'hex', 'kde' lub 'reg'. Typ hex jest przydatny, gdy występują tysiące nakładających się punktów — grupuje je w sześciokąty i używa koloru do pokazania gęstości, rozwiązując problem nakładania punktów, przez który wykresy punktowe stają się nieczytelne dla dużych zbiorów danych.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# KDE joint plot with marginal distributions
sns.jointplot(
    data=tips,
    x='total_bill',
    y='tip',
    kind='reg',
    marginal_kws={'bins': 20}
)
plt.suptitle('Joint Distribution of Bill and Tip', y=1.02)
plt.show()

Szybkie sprawdzenie

Sprawdź swoje zrozumienie wykresów punktowych i wykresów par w bibliotece Seaborn z tego rozdziału.

Podsumowanie lekcji

W tej lekcji poznali Państwo: sns.scatterplot koduje do czterech zmiennych za pomocą parametrów x, y, hue, size i style, sns.regplot/lmplot nakłada linię regresji w celu ilościowego określenia zależności liniowych, a sns.pairplot tworzy siatkę wszystkich par, idealną do eksploracyjnej analizy zbiorów danych z wieloma zmiennymi. Następnie zajmiemy się mapami cieplnymi służącymi do wizualizacji macierzy korelacji.

Często zadawane pytania

Czy lekcja „Wykresy punktowe i wykresy par” jest bezpłatna?

Tak — pełny tekst „Wykresy punktowe i wykresy par” 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 punktowe i wykresy par”?

Twórz wykresy punktowe pokolorowane według trzeciej zmiennej za pomocą sns.scatterplot i wizualizuj wszystkie zależności parami za pomocą sns.pairplot. Ć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 3 z 4.

Ile czasu zajmuje lekcja „Wykresy punktowe i wykresy par”?

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