Pandas & NumPy Academy · Lektion

Stapeldiagram och histogram

Visualisera kategoriska antal med ax.bar() och datafördelningar med ax.hist() och justera antalet intervall samt kantfärg.

Lektion 3 av 413 steg

Stapeldiagram och histogram ä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.

Stapeldiagram och histogram

Stapeldiagram visar kategoriska data: en stapel per kategori, där stapelns höjd står i proportion till ett värde. De besvarar frågan ”hur mycket har varje kategori?”. Histogram visar fördelningen av en kontinuerlig numerisk variabel: data delas in i intervall och stapelhöjden visar antalet eller frekvensen i varje intervall. De besvarar frågan ”hur är dessa värden fördelade?”. Båda använder ax.bar() respektive ax.hist().

ax.bar() för vertikala stapeldiagram

ax.bar(x, height) ritar ett vertikalt stapeldiagram där x är en sekvens med kategoriers positioner (eller etiketter) och height är stapelvärdet. Viktiga parametrar är: width (standardvärde 0.8, styr stapelns bredd i förhållande till mellanrummet), color, edgecolor och align ('center' eller 'edge'). Metoden returnerar en lista med artistobjekt av typen Rectangle.

import matplotlib.pyplot as plt
import numpy as np

categories = ['East', 'West', 'North', 'South']
values = [420, 380, 310, 290]

fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(categories, values, color='steelblue', edgecolor='white', width=0.6)
ax.set_title('Regional Revenue')
ax.set_xlabel('Region')
ax.set_ylabel('Revenue (USD)')
# plt.show()
plt.close()

Anpassa staplarnas utseende

Några anpassningar gör stapeldiagram betydligt lättare att läsa: använd en enda accentfärg för alla staplar (eller en array med färger för att skilja staplarna åt), lägg till värdeetiketter ovanför varje stapel med ax.bar_label(), styr stapelbredden så att det finns luft mellan staplarna och ange ax.set_ylim(0, max * 1.15) för att skapa utrymme för etiketter ovanför den högsta stapeln.

fig, ax = plt.subplots(figsize=(7, 4))
bars = ax.bar(categories, values, color='steelblue', edgecolor='white', width=0.6)

# Add value labels above bars
ax.bar_label(bars, fmt='%d', padding=3, fontsize=10)

# Give space above bars for labels
ax.set_ylim(0, max(values) * 1.15)
ax.set_title('Regional Revenue')
plt.tight_layout()
plt.close()

Horisontella stapeldiagram med ax.barh()

Använd ax.barh(y, width) för horisontella stapeldiagram. Horisontella staplar föredras när kategorietiketterna är långa (de läses naturligt från vänster till höger) eller när det finns många kategorier (de kan placeras mer kompakt). Samma anpassningsparametrar gäller: height styr staplarnas tjocklek och ax.barh_label() (eller ax.bar_label()) lägger till textetiketter.

import pandas as pd
df = pd.DataFrame({'region': categories, 'revenue': values})
df_sorted = df.sort_values('revenue')

fig, ax = plt.subplots(figsize=(7, 4))
ax.barh(df_sorted['region'], df_sorted['revenue'],
        color='steelblue', edgecolor='white', height=0.5)
ax.set_title('Revenue by Region (Sorted)')
ax.set_xlabel('Revenue (USD)')
plt.tight_layout()
plt.close()

Grupperade stapeldiagram

För att jämföra flera grupper sida vid sida skapar Ni ett grupperat stapeldiagram genom att manuellt förskjuta staplarnas positioner. Beräkna mittpositionerna för varje grupp och subtrahera eller addera sedan en fast förskjutning för varje undergrupp. Den totala stapelbredden plus mellanrummet mellan grupperna måste vara 1.0 för att staplarna inte ska överlappa. Genom att ange ax.set_xticks() centreras ticketiketterna mellan de grupperade staplarna.

products = ['A', 'B', 'C']
q1 = [80, 120, 95]
q2 = [90, 110, 105]

x = np.arange(len(products))
width = 0.35

fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(x - width/2, q1, width, label='Q1', color='steelblue')
ax.bar(x + width/2, q2, width, label='Q2', color='coral')

ax.set_xticks(x)
ax.set_xticklabels(products)
ax.legend()
ax.set_title('Q1 vs Q2 Sales by Product')
plt.close()

Stapeldiagram med staplade staplar

Staplade staplar visar hur en totalsumma är sammansatt av flera undergrupper. Den andra gruppens staplar börjar där den första gruppens staplar slutar, med hjälp av parametern bottom. För varje efterföljande lager är bottom den kumulativa summan av alla tidigare lager. Staplade staplar är användbara för att samtidigt visa både totalsumman och varje komponents bidrag.

q1_arr = np.array(q1)
q2_arr = np.array(q2)

fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(products, q1_arr, label='Q1', color='steelblue')
ax.bar(products, q2_arr, bottom=q1_arr, label='Q2', color='coral')

ax.legend()
ax.set_title('Stacked Q1 + Q2 Sales by Product')
ax.set_ylabel('Total Sales')
plt.close()

ax.hist() för histogram

ax.hist(data, bins) skapar ett histogram. Parametern bins styr i hur många lika stora intervall data delas upp (standardvärde 10). Ni kan också skicka en lista med intervallgränser för intervall av olika storlek. Viktiga parametrar är: density=True normaliserar histogrammet till en sannolikhetstäthet, edgecolor lägger till kanter mellan staplarna och color samt alpha styr utseendet.

np.random.seed(42)
data = np.random.randn(500)  # 500 samples from standard normal

fig, ax = plt.subplots(figsize=(7, 4))
ax.hist(data, bins=30, color='steelblue', edgecolor='white', alpha=0.7)
ax.set_title('Distribution of Values')
ax.set_xlabel('Value')
ax.set_ylabel('Count')
plt.close()

Välja antal intervall

Antalet stapelintervall påverkar i hög grad hur ett histogram ser ut. För få intervall döljer strukturer, medan för många intervall skapar brusiga toppar. Vanliga tumregler är Sturges regel (≈ log2(n) + 1), Scotts regel och Freedman–Diaconis-regeln. Matplotlib stöder dessa som strängar: bins='auto', bins='scott', bins='fd'. Vid explorativ analys kan du prova några värden manuellt. För presentationer bör du välja det antal intervall som bäst förmedlar fördelningens form.

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

for ax, b in zip(axes, [5, 30, 'auto']):
    ax.hist(data, bins=b, edgecolor='white', color='steelblue', alpha=0.7)
    ax.set_title(f'bins={b}')
    ax.set_xlabel('Value')

plt.tight_layout()
plt.close()

Överlappande histogram för jämförelse

Om du vill jämföra två fördelningar på samma axlar anropar du ax.hist() två gånger med olika data och färger. Använd alpha=0.5 för båda, så att överlappningen syns. Lägg till etiketter och anropa ax.legend(). Om du använder density=True normaliseras båda histogrammen till samma skala när stickprovsstorlekarna skiljer sig åt, vilket gör formerna direkt jämförbara.

group_a = np.random.randn(300)
group_b = np.random.randn(300) + 1.5  # shifted right

fig, ax = plt.subplots(figsize=(7, 4))
ax.hist(group_a, bins=25, alpha=0.5, color='steelblue', label='Group A', density=True)
ax.hist(group_b, bins=25, alpha=0.5, color='coral', label='Group B', density=True)
ax.legend()
ax.set_title('Distribution Comparison')
plt.close()

Visualisera Pandas-serier och DataFrames

Både .plot.bar() och .plot.hist() finns som metoder för DataFrame/Series och skapar automatiskt Matplotlib-figurer. De accepterar parametern ax för att rita på en befintlig Axes. Det här är det snabbaste sättet att skapa stapeldiagram från grupperade Pandas-data: beräkna aggregeringen med groupby, anropa .plot.bar() på resultatet och anpassa sedan den returnerade Axes.

import pandas as pd
import numpy as np

df_sales = pd.DataFrame({
    'region': ['East', 'West', 'North', 'South'],
    'revenue': [420, 380, 310, 290]
}).set_index('region')

fig, ax = plt.subplots(figsize=(7, 4))
df_sales['revenue'].plot.bar(ax=ax, color='steelblue', rot=0)
ax.set_title('Revenue by Region')
plt.tight_layout()
plt.close()

Välja mellan stapeldiagram och histogram

Valet mellan ett stapeldiagram och ett histogram beror på datatypen. Använd ett stapeldiagram när x-axeln representerar tydligt åtskilda, oordnade kategorier (produktnamn, regioner eller användarsegment) där staplarna visar aggregerade värden för varje kategori. Använd ett histogram när x-axeln är en kontinuerlig numerisk variabel och du vill visa hur värdena fördelar sig över ett intervall. Att blanda ihop dem är ett vanligt visualiseringsfel som vilseleder läsarna om datatypen.

# Bar chart: categorical x-axis (product names)
products = ['Widget', 'Gadget', 'Doohickey']
revenue = [500, 300, 200]
fig, ax = plt.subplots(figsize=(5, 3))
ax.bar(products, revenue, color='steelblue')
ax.set_title('Revenue per Product (Bar Chart)')
plt.close()

# Histogram: continuous x-axis (order sizes)
order_sizes = np.random.exponential(scale=50, size=300)
fig, ax = plt.subplots(figsize=(5, 3))
ax.hist(order_sizes, bins=20, color='coral', edgecolor='white')
ax.set_title('Distribution of Order Sizes (Histogram)')
plt.close()

Snabbtest

Testa dina kunskaper om stapeldiagram och histogram från den här lektionen.

Sammanfattning av lektionen

I den här lektionen har du lärt dig att ax.bar() skapar vertikala stapeldiagram och ax.barh() skapar horisontella stapeldiagram; bottom aktiverar staplade staplar; ax.hist() skapar histogram där antalet intervall styrs av bins; och density=True normaliserar histogram för rättvis jämförelse. Härnäst lägger vi till ax etiketter, rubriker och sparar figurer med publiceringskvalitet.

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 ”Stapeldiagram och histogram” gratis?

Ja – hela texten till ”Stapeldiagram och histogram” 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 ”Stapeldiagram och histogram”?

Visualisera kategoriska antal med ax.bar() och datafördelningar med ax.hist() och justera antalet intervall samt kantfärg. 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 ”Stapeldiagram och histogram”?

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. Figur- och axelarkitektur
  2. Linje- och punktdiagram
  3. Stapeldiagram och histogram
  4. Etiketter, rubriker och att spara figurer
← Tillbaka till Pandas & NumPy Academy