heatmap python uitleg blog met voorbeeld en tutorial

Wat is een heatmap?

Een heatmap is een matrix-visualisatie: je zet waarden in een tabel van rijen en kolommen en geeft de grootte van elke waarde weer met een kleur.

Je spreekt van een heatmap wanneer je data zich laat samenvatten als:

  • Twee dimensies (bijv. dag en uur, product en regio, type service en fouttype)
  • En een meetwaarde per combinatie (bijv. aantal, gemiddelde duur, percentage)

Zie onderstaand voorbeeld. Het toont de drukte in een winkel, met als meetwaarde het aantal bezoekers, en als dimensies dagen in de week en tijden op een dag.

heatmap_python_voorbeeld_winkel

Je ziet hier in één oogopslag wanneer het drukker of rustiger is in een winkel. Zo zie je bijvoorbeeld dat de vrijdagmiddag duidelijk drukker is dan andere momenten, wat kan wijzen op een vast piekmoment.

Waarom heatmaps in de praktijk handig zijn

Heatmaps zijn in de praktijk handig omdat ze patronen laten zien die je in tabellen of losse grafieken snel mist. In één oogopslag zie je waar pieken, dalen en terugkerende structuren zitten, zonder eerst zelf cijfers te hoeven vergelijken.

Dat maakt ze bijzonder geschikt voor vragen zoals:

  • Wanneer is het druk?
  • Waar wijkt iets af?
  • Welke momenten springen eruit?

Juist voor niet-technische lezers werkt dit goed, omdat de interpretatie grotendeels visueel is. Wanneer je de juiste dimensies, meetwaarden en kleuren kiest, zijn heatmaps een krachtige manier om complexe data begrijpelijk te maken voor analyse en besluitvorming.

Wanneer gebruik je een heatmap (en wanneer niet)?

Een heatmap gebruik je wanneer je patronen wilt ontdekken in data met twee dimensies, zoals tijd en locatie of dag en uur. Ze zijn vooral geschikt om relatieve verschillen, pieken en structuren snel zichtbaar te maken.

Minder geschikt zijn heatmaps wanneer exacte waarden, trends over één as of individuele metingen centraal staan. Ook bij kleine datasets of categorieën zonder natuurlijke ordening voegen ze weinig toe. De kracht van een heatmap zit dus vooral in overzicht en vergelijking.

Hoe maak je een heatmap: van data naar matrix

  1. Bepaal de vraag: Wat wil je in één oogopslag zien? Bijvoorbeeld: wanneer is het druk, waar zitten pieken, of waar wijkt iets af?

  2. Kies twee betekenisvolle dimensies: Selecteer twee assen die samen een logisch raster vormen, zoals tijd en locatie of dag en uur.

  3. Kies één meetwaarde: Bepaal welke grootheid je per combinatie wilt tonen, bijvoorbeeld een gemiddelde, totaal of aantal.

  4. Breng de data terug tot een tabel: Zorg dat elke combinatie van de twee dimensies precies één waarde krijgt. Dit doe je door te aggregeren: bijvoorbeeld het gemiddelde aantal bezoekers op vrijdagen tussen 15.00 en 17.00 uur. Dit is de cruciale stap: een goed opgebouwde tabel is de basis van een heatmap. Let hierbij ook op de gekozen periode. Spreiding door seizoenspatronen of trends verdwijnt in de aggregatie, maar beïnvloedt wel het beeld dat de heatmap geeft.

  5. Visualiseer de tabel: Pas als deze tabel logisch is, ga je visualiseren met een heatmap.

Python tutorial / voorbeeld

We gaan in een paar stappen de heatmap uit het eerdere voorbeeld maken met programmeertaal Python: drukte in een winkel naar tijdstip op een dag.

Als eerste maken we een simpele opzet. We maken dummy data aan, en gebruiken package Matplotlib en functies imshow() en colorbar() om een heatmap te maken.

import matplotlib.pyplot as plt
import numpy as np

drukte = np.array([
    [12, 20, 30, 25, 40],
    [25, 35, 50, 45, 70],
    [40, 60, 80, 70, 110],
    [55, 75, 95, 85, 140]
])

plt.imshow(drukte)
plt.colorbar()
plt.show()

Output:

heatmap_python_voorbeeld_winkel_simpel

We zien een heatmap, maar dit kan mooier en duidelijker.

Met onderstaande code breiden we dit verder uit, door onder andere assen te labelen, een titel toe te voegen, en een andere kleurenschaal (colormap) te gebruiken. Ook tonen we de waarden in iedere cel.

We gebruiken een kleurenblind-vriendelijke colormap met een gelijkmatig helderheidsverloop, zodat verschillen vooral door licht-donker worden bepaald.

import matplotlib.pyplot as plt
import numpy as np

# Dummy data: drukte (aantal bezoekers) per uur (rijen) en dag (kolommen)
drukte = np.array([
    [12, 20, 30, 25, 40],    # 09–11
    [25, 35, 50, 45, 70],    # 11–13
    [40, 60, 80, 70, 110],   # 13–15
    [55, 75, 95, 85, 140]    # 15–17
])

dagen = ["Ma", "Di", "Wo", "Do", "Vr"]
uren = ["09–11", "11–13", "13–15", "15–17"]

fig, ax = plt.subplots()

im = ax.imshow(drukte, cmap="cividis")
fig.colorbar(im, ax=ax, label="Aantal bezoekers")

ax.set(
    xticks=range(len(dagen)),
    yticks=range(len(uren)),
    xticklabels=dagen,
    yticklabels=uren,
    title="Drukte per uur en dag (winkel)",
    xlabel="Dag",
    ylabel="Tijdstip",
    aspect="equal"
)

# Y-as omkeren (laatste tijdvak bovenaan)
ax.invert_yaxis()

# Waarden in cellen tonen
for (i, j), v in np.ndenumerate(drukte):
    ax.text(j, i, v, ha="center", va="center")

plt.tight_layout()
plt.show()

Output:

heatmap_python_voorbeeld_winkel_2

Door deze aanpassingen zien we nu de beoogde grafiek.

Relevante Python packages

Bij het voorwerk qua dataverwerking om tot heatmaps te komen maak je in de praktijk vaak gebruik van packages als pandas en/of NumPy.

Voor het maken van heatmaps zijn er verschillende packages te gebruiken:

  • matplotlib -> basis plots en veel controle over assen en uitstraling
  • seaborn -> snelle en leesbare heatmaps, met minder controle over details
  • plotly -> interactieve heatmaps voor dashboards

Beperkingen en interpretatie

Een heatmap lijkt objectief, maar dat is ze niet. Kleurgebruik stuurt sterk wat opvalt en wat niet. Een ongeschikte colormap kan verschillen overdrijven of juist verbergen, of een omslagpunt suggereren dat inhoudelijk niet bestaat. Kleur is daarom geen opmaakkeuze, maar een analytische keuze.

Daarnaast verbergen heatmaps altijd informatie:

  • Individuele metingen verdwijnen in aggregaties
  • Spreiding in waarden binnen een cel is niet zichtbaar
  • Cellen met weinig data kunnen visueel even zwaar wegen als cellen met veel data

Ook is de selectie van de data cruciaal. Heatmaps laten patronen zien binnen de gekozen periode, maar verbergen vaak bredere spreiding zoals seizoensinvloeden, trends of structurele verschuivingen (in dit geval kun je een time series analyse overwegen). Een heatmap over één maand kan een heel ander beeld geven dan dezelfde analyse over een jaar. Zonder die context is het risico groot dat tijdelijke patronen worden aangezien voor structureel gedrag.

Een heatmap is daarmee geen eindconclusie, maar een hulpmiddel om patronen te verkennen en gerichte vervolgvragen te stellen.

Conclusie

Heatmaps zijn een krachtig middel om patronen en verschillen in data snel zichtbaar te maken, mits ze bewust worden ingezet. Hun waarde zit niet in exacte cijfers, maar in het overzicht dat ze bieden. Tegelijkertijd vragen ze om zorgvuldige keuzes in assen, aggregatie en kleurgebruik. Zonder die keuzes kan een heatmap eerder misleiden dan verhelderen. Gebruik heatmaps daarom bewust: als verkennend instrument, niet zonder meer als conclusie, maar als startpunt voor verder denken en analyseren.

Wil je op professioneel niveau met Python leren werken?

Schrijf je dan in voor onze Python cursus voor data science, Python advanced training, onze machine learning cursus, of voor onze data science opleiding en leer met vertrouwen te programmeren en visualiseren in Python. Nadat je een van onze trainingen hebt gevolgd kun je zelfstandig verder aan de slag. Je kunt ook altijd even contact opnemen als je een vraag hebt.

Download één van onze opleidingsbrochures voor meer informatie

by: