Pandas & NumPy Academy · Lektion

Punktdiagram och parvisa diagram

Skapa punktdiagram färglagda efter en tredje variabel med sns.scatterplot och visualisera alla parvisa samband med sns.pairplot.

Lektion 3 av 413 steg

Punktdiagram och parvisa diagram är en gratis lektion i Pandas & NumPy Academy på CoddyKit. Detta är lektion 3 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.

Visualisera samband mellan variabler

Fördelningsdiagram visar en variabel i taget. När Ni vill förstå sambandet mellan två numeriska variabler behöver Ni spridningsdiagram och relaterade visualiseringar. De hjälper Er att upptäcka korrelation (ökar båda variablerna tillsammans?), kluster (finns det undergrupper i datan?) och avvikare (finns det ovanliga punkter långt från det huvudsakliga punktmolnet?). Seaborn gör allt detta enkelt med scatterplot och 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)

Grundläggande spridningsdiagram med sns.scatterplot

sns.scatterplot(data, x, y) ritar varje observation som en punkt vid dess (x, y)-koordinater. Till skillnad från Matplotlibs plt.scatter kopplas Seaborns version automatiskt till en DataFrame och integreras med semantiken för hue, size och style. Resultatet blir informativa flervariabeldiagram med ett enda funktionsanrop och en automatisk förklaring.

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

Koda en tredje variabel med hue

Parametern hue tilldelar varje punkt en färg baserat på en tredje variabel – antingen kategorisk eller numerisk. När hue är en kategorisk kolumn, till exempel 'smoker', använder Seaborn olika färger. När hue är en numerisk kolumn används en sekventiell färgkarta. På så sätt kan Ni se tre variabler samtidigt i ett 2D-diagram utan att lägga till en tredje axel.

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

Koda storlek och stil

Utöver hue stöder Seaborns spridningsdiagram size (punktens area kodar en numerisk variabel) och style (markörens form kodar en kategorisk variabel). Om Ni använder alla tre semantiker samtidigt kan komplexa mönster med flera variabler framträda, men diagrammet riskerar att överbelasta betraktaren. En praktisk riktlinje är att använda hue först (mest framträdande), style därefter och size endast när det behövs.

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

Lägga till en regressionslinje med regplot

sns.regplot() ritar ett spridningsdiagram och lägger ovanpå det en linjär regressionslinje med ett skuggat 95-procentigt konfidensband. Detta är användbart för att visualisera styrkan och riktningen hos det linjära sambandet mellan två variabler. Konfidensbandet blir smalare i områden med tät data och bredare vid kanterna, där färre punkter påverkar anpassningen.

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: regressionsdiagram med fasetter

sns.lmplot() är versionen på figurnivå av regplot. Den stöder hue (separata regressionslinjer per grupp i samma panel) och col/row (separata paneler). Detta är användbart för att undersöka om sambandet mellan två variabler skiljer sig mellan undergrupper – till exempel om sambandet mellan nota och dricks är starkare för middag än för lunch.

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

Introduktion till parvisa diagram

sns.pairplot(df) skapar ett rutnät med spridningsdiagram för varje par av numeriska kolumner i DataFrame-objektet, med fördelningsdiagram på diagonalen. Detta är det snabbaste sättet att visualisera alla parvisa samband i en datamängd med ett enda anrop. För en DataFrame med n numeriska kolumner skapar pairplot ett n×n-rutnät. Det är mest praktiskt när n ligger mellan 3 och 8 – större rutnät blir för små för att kunna läsas.

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

Anpassa diagonalen i pairplot

Parametern diag_kind styr vad som visas på diagonalen i pairplot-rutnätet. Använd 'hist' för histogram eller 'kde' för kärntäthetsestimat. Diagonalen visar varje variabels univariata fördelning, medan panelerna utanför diagonalen visar parvisa spridningsdiagram. Ni kan även använda corner=True för att endast visa den nedre triangeln, vilket halverar antalet paneler och minskar överflödig information.

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 för fullständig anpassning

sns.PairGrid ger Er full kontroll över vilken diagramtyp som visas i varje del av matrisen. Använd g.map_upper(), g.map_lower() och g.map_diag() för att tilldela olika funktioner, till exempel regplot i den övre triangeln och kdeplot i den nedre. Detta ger diagram av publiceringskvalitet där varje panel förmedlar särskild information om variabelparet.

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

Identifiera korrelation i spridningsdiagram

När Ni läser av ett spridningsdiagram ska Ni uppskatta sambandet riktning (lutar punktsvärmen uppåt eller nedåt?), styrka (hur tätt ligger punkterna kring trenden?) och form (linjär eller böjd?). Korrelationskoefficienten r sträcker sig från -1 (perfekt negativ) till +1 (perfekt positiv), där 0 betyder att det inte finns något linjärt samband. Kom ihåg: korrelation är inte kausalitet, och ett icke-linjärt samband kan ha 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 för bivariat data med marginaler

sns.jointplot() kombinerar ett centralt bivariat diagram med marginaldiagram för univariata data längs över- och högerkanten. Ange kind='scatter', 'hex', 'kde' eller 'reg'. Sorten hex är användbar när Ni har tusentals överlappande punkter — den delar in dem i hexagoner och använder färg för att visa täthet, vilket löser problemet med överplottning som gör spridningsdiagram oläsliga för stora datamängder.

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

Snabbkontroll

Testa Er förståelse av Seaborns spridnings- och parvisa diagram från den här lektionen.

Sammanfattning av lektionen

I den här lektionen har Ni lärt Er att sns.scatterplot kodar upp till fyra variabler med x, y, hue, size och style, att sns.regplot/lmplot lägger över en regressionslinje för att kvantifiera linjära samband och att sns.pairplot skapar ett rutnät med alla par, vilket är idealiskt för explorativ analys av datamängder med flera variabler. Härnäst utforskar vi värmekartor för visualisering av korrelationsmatriser.

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 ”Punktdiagram och parvisa diagram” gratis?

Ja – hela texten till ”Punktdiagram och parvisa diagram” 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 ”Punktdiagram och parvisa diagram”?

Skapa punktdiagram färglagda efter en tredje variabel med sns.scatterplot och visualisera alla parvisa samband med sns.pairplot. 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 3 av 4.

Hur lång tid tar lektionen ”Punktdiagram och parvisa diagram”?

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