In deze tutorial laat ik zien hoe je lijnplots, staafplots en scatterplots maakt in Matplotlib met beursdata. De tutorial gaat uit van enige bekendheid met NumPy-arrays en pandas DataFrames. Ik leg uit wat elke aanroep van de bibliotheek doet wanneer die voorkomt, maar de hoofdfocus ligt hier op Matplotlib.
TL;DR
-
Matplotlib is Python's fundamentele plottingbibliotheek — installeer met
pip install matplotliben importeer alsimport matplotlib.pyplot as plt -
Maak lijnplots met
plt.plot(x, y), staafplots metplt.bar(x, height)en scatterplots metplt.scatter(x, y) -
Roep altijd
plt.show()aan om de plot te tonen, ofplt.savefig('filename.png')om hem op te slaan -
Pas aan met
plt.title(),plt.xlabel(),plt.ylabel()en de parametercolor -
Gebruik colormaps (
cmap) voor continue data enplt.legend()voor plots met meerdere reeksen
Wat is Matplotlib?
Matplotlib is de meest gebruikte datavisualisatiebibliotheek in Python, met meer dan 50 miljoen maandelijkse downloads in 2026. Het maakt statische, interactieve en geanimeerde plots zoals lijngrafieken, staafdiagrammen, scatterplots, histogrammen en meer. De meeste andere Python-visualisatiebibliotheken (Seaborn, pandas-plotting en zelfs delen van Plotly) zijn gebouwd boven op Matplotlib.
Matplotlib biedt zeer fijnmazige controle over elk visueel element, wat betekent dat je meer code schrijft, zelfs voor basisplots. Als snelle, verkennende grafieken je prioriteit zijn, biedt Seaborn hogere-orde defaults die er direct goed uitzien. Voor interactieve, webgebaseerde grafieken is Plotly Express een andere optie om te overwegen.
Aan het einde van deze tutorial weet je hoe je lijnplots, staafplots en scatterplots maakt zoals hieronder, plus de basis van maatwerk: kleuren kiezen, labels en titels toevoegen, aslimieten instellen en voltooide figuren naar bestand wegschrijven.

Aan de slag met Matplotlib
Laten we zonder omwegen Matplotlib laden en snel de dataset bekijken die in deze tutorial wordt gebruikt.
Matplotlib laden
Voordat je plots maakt, moet je de bibliotheek importeren. De submodule pyplot biedt alle plotfuncties die in deze tutorial worden gebruikt.
De conventie is om pyplot te aliassen als plt. Ik importeer hier ook pandas, NumPy en datetime, omdat latere secties die gebruiken.
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from datetime import datetime
De DJIA-indexdataset laden
Matplotlib is ontworpen om te werken met NumPy-arrays en pandas-dataframes. De bibliotheek maakt het eenvoudig om grafieken te bouwen vanuit tabeldata. Voor deze tutorial gebruiken we de historische prijzen van de Dow Jones Industrial Average (DJIA) van 2022-01-01 tot 2022-12-31 (hier te vinden). Je kunt het datumbereik op de pagina instellen en vervolgens op de knop “download a spreadsheet” klikken.
We laden het CSV-bestand, genaamd HistoricalPrices.csv, met de bibliotheek pandas en bekijken de eerste rijen met de methode .head().
import pandas as pd
djia_data = pd.read_csv('HistoricalPrices.csv')
djia_data.head()

We zien dat de data 4 kolommen bevat: Date, Open, High, Low en Close. De laatste 4 hebben betrekking op de prijs van de index tijdens de handelsdag. Hieronder een korte uitleg van elke variabele.
- Date: De dag waarop de koersinformatie betrekking heeft.
- Open: De prijs van de DJIA om 9:30 AM ET wanneer de beurs opent.
- High: De hoogste prijs die de DJIA gedurende de dag heeft bereikt.
- Low: De laagste prijs die de DJIA gedurende de dag heeft bereikt.
- Close: De prijs van de DJIA toen de handel om 4:00 PM ET stopte.
Als snelle opschoonstap gebruiken we ook de methode rename() in pandas, omdat de dataset die we hebben gedownload een extra spatie in de kolomnamen heeft.
djia_data = djia_data.rename(columns = {' Open': 'Open', ' High': 'High', ' Low': 'Low', ' Close': 'Close'})
We zetten de kolom Date ook om naar een datetime-type en sorteren oplopend op datum. Voor meer over typeconversie, zie de tutorial Python Data Type Conversion.
djia_data['Date'] = pd.to_datetime(djia_data['Date'])
djia_data = djia_data.sort_values(by = 'Date')
Lijnplots tekenen met Matplotlib
Lijnplots laten zien hoe waarden veranderen over een continue dimensie, meestal over tijd. Ze zijn de standaardgrafiek voor tijdreeksdata, omdat de verbonden punten in één oogopslag trends, seizoenspatronen en afwijkingen laten zien.
Lijnplots met één lijn
We kunnen een lijnplot maken in matplotlib met de methode plt.plot(), waarbij het eerste argument de x-variabele is en het tweede argument de y-variabele in onze lijnplot. Wanneer we een plot maken, moeten we altijd plt.show() aanroepen om ervoor te zorgen dat we de gemaakte grafiek zien. We visualiseren de slotkoers van de DJIA in de tijd.
plt.plot(djia_data['Date'], djia_data['Close'])
plt.show()

We zien dat de indexkoers in de loop van het jaar begon op de hoogste waarde, gevolgd door schommelingen op en neer gedurende het jaar. Rond oktober zien we de laagste prijs, gevolgd door een sterke stijging richting het einde van het jaar.
Lijnplots met meerdere lijnen
We kunnen meerdere lijnen in dezelfde plot visualiseren door vóór de functie plt.show() nog een plt.plot()-aanroep toe te voegen.
plt.plot(djia_data['Date'], djia_data['Open'])
plt.plot(djia_data['Date'], djia_data['Close'])
plt.show()

Gedurende het jaar lagen de openings- en slotkoersen van de DJIA per dag relatief dicht bij elkaar, zonder een duidelijk patroon dat de ene structureel boven of onder de andere lag.
Een legenda toevoegen
Als we willen aangeven welke lijn welke kolom voorstelt, kunnen we een legenda toevoegen. Dit creëert een kleurgecodeerd label in de hoek van de grafiek. We doen dit met plt.legend() en door label-parameters toe te voegen aan elke plt.plot()-aanroep.
plt.plot(djia_data['Date'], djia_data['Open'], label = 'Open')
plt.plot(djia_data['Date'], djia_data['Close'], label = 'Close')
plt.legend()
plt.show()

We zien nu een legenda met de opgegeven labels op de standaardlocatie rechtsboven (de locatie kun je opgeven met het argument loc in plt.legend()).
Staafplots tekenen met Matplotlib
Staafplots zijn erg handig om numerieke waarden over categorieën te vergelijken. Ze helpen vooral bij het vinden van de grootste en kleinste categorieën.
Voor dit gedeelte aggregeren we de data naar maandgemiddelden met pandas .groupby() zodat we de maandelijkse prestaties van de DJIA kunnen vergelijken. Voor een diepere blik op groeperingsoperaties, zie de tutorial Pandas GroupBy.
# Importeer het calendar-pakket
from calendar import month_name
# Orden de maanden chronologisch
djia_data['Month'] = pd.Categorical(djia_data['Date'].dt.month_name(), month_name[1:])
# Groepeer statistieken naar maandgemiddelden
djia_monthly_mean = djia_data \
.groupby('Month') \
.mean(numeric_only=True) \
.reset_index()
djia_monthly_mean.head(6)

Verticale staafplots
We beginnen met een staafdiagram met verticale balken. Dit kan met de methode plt.bar(), met als eerste argument de variabele voor de x-as (Month) en als parameter height de y-as (Close). Vervolgens roepen we plt.show() aan om onze plot te tonen.
plt.bar(djia_monthly_mean['Month'], height = djia_monthly_mean['Close'])
plt.show()

We zien dat de meeste slotkoersen van de DJIA dicht bij elkaar lagen, met de laagste gemiddelde slotwaarde in juni en de hoogste in januari.
Balken herordenen in staafplots
Als we deze balken willen tonen in volgorde van hoog naar laag, op basis van de gemiddelde maandelijkse slotkoers, kunnen we de balken sorteren met de methode sort_values() in pandas en vervolgens dezelfde methode plt.bar() gebruiken.
djia_monthly_mean_srtd = djia_monthly_mean.sort_values(by = 'Close', ascending = False)
plt.bar(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'])
plt.show()

Zoals je ziet is het nu aanzienlijk makkelijker te zien welke maanden de hoogste gemiddelde DJIA-slotkoers hadden en welke de laagste. Ook het vergelijken en rangschikken van maanden wordt eenvoudiger.
Horizontale staafplots
Soms is het makkelijker om staafdiagrammen te interpreteren en labels te lezen wanneer we horizontale balken gebruiken. Dat kan met de methode plt.barh().
plt.barh(djia_monthly_mean_srtd['Month'], width = djia_monthly_mean_srtd['Close'])
plt.show()

Zoals je ziet zijn de labels van elke categorie (maand) makkelijker te lezen dan bij verticale balken. We kunnen nog steeds eenvoudig groepen vergelijken. Dit horizontale staafdiagram is vooral handig wanneer er veel categorieën zijn.
Scatterplots tekenen met Matplotlib
Scatterplots tonen de relatie tussen twee numerieke variabelen. Elk punt staat voor één observatie, en het algemene patroon laat zien of er een lineaire, niet-lineaire of geen relatie is, wat direct je keuze van modelleertechniek beïnvloedt.
Een basis-scatterplot maken
Net als bij de andere plots kun je een scatterplot maken met pyplot.scatter(), waarbij het eerste argument de variabele voor de x-as is en het tweede argument de variabele voor de y-as. In dit voorbeeld bekijken we de relatie tussen de open- en slotkoersen van de DJIA.
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.show()

Op de x-as staat de openingskoers van de DJIA, en op de y-as de slotkoers. Zoals je zou verwachten, zien we dat naarmate de openingskoers stijgt, de slotkoers ook sterk toeneemt.
Een trendlijn toevoegen
Vervolgens voegen we een trendlijn toe aan de grafiek om de lineaire relatie tussen de open- en close-variabelen explicieter te laten zien. Hiervoor gebruiken we de numpy-methoden polyfit() en poly1d(). De eerste methode geeft een kleinste-kwadraten-polynoomfit waarbij het eerste argument de x-variabele is, het tweede de y-variabele en het derde de graad van de fit (1 voor lineair). De tweede methode geeft een eendimensionale polynoomklasse die we kunnen gebruiken om met plt.plot() een trendlijn te maken.
z = np.polyfit(djia_data['Open'], djia_data['Close'], 1)
p = np.poly1d(z)
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.plot(djia_data['Open'], p(djia_data['Open']))
plt.show()

Zoals we zien, volgt de lijn op de achtergrond van de grafiek het patroon van de scatterplot nauw, omdat de relatie tussen open en close sterk lineair is. We zien dat naarmate de openingskoers stijgt, de slotkoers doorgaans in vergelijkbaar en lineair tempo stijgt.
De plottitel en aslabels instellen
Plottitels en aslabels helpen de lezer te begrijpen naar welke data ze kijken. Matplotlib biedt plt.title(), plt.xlabel() en plt.ylabel() om een plot te annoteren. Hier is de vorige scatterplot met alle drie toegevoegd:
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.title('DJIA 2022: Open vs. Close Price')
plt.xlabel('Open Price ($)')
plt.ylabel('Close Price ($)')
plt.show()

Kleuren aanpassen
Kleurkeuzes beïnvloeden zowel de leesbaarheid als de nadruk. In Matplotlib kun je kleuren op drie manieren opgeven:
-
Benoemde kleuren:
"red","blue","steelblue" -
Hex-codes:
"#f4db9a","#383c4a" -
RGB-tuplets:
(0.49, 0.39, 0.15),(0.12, 0.21, 0.47)
Lijnkleur wijzigen
Voor een lijnplot kun je de kleur wijzigen met het attribuut color in plt.plot(). Hieronder veranderen we de kleur van onze lijn voor de openingskoers naar “black” en die van de slotkoers naar “red”.
plt.plot(djia_data['Date'], djia_data['Open'], color = 'black')
plt.plot(djia_data['Date'], djia_data['Close'], color = 'red')
plt.show()

Balkkleur wijzigen
Voor balken kunnen we een lijst doorgeven aan het attribuut color om de kleur van elke balk te specificeren. Stel dat we de gemiddelde prijs in januari willen benadrukken voor een punt dat we willen maken over hoe sterk de gemiddelde slotkoers was. Dat kan door die balk een unieke kleur te geven om er de aandacht op te vestigen.
plt.bar(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'], color = ['blue', 'gray', 'gray', 'gray', 'gray', 'gray'])
plt.show()

Puntkleur wijzigen
Voor scatterplots kunnen we ten slotte de kleur veranderen met het attribuut color van plt.scatter(). We kleuren alle punten in januari blauw en alle andere punten grijs om een vergelijkbaar verhaal te laten zien als in de bovenstaande visualisatie.
plt.scatter(djia_data[djia_data['Month'] == 'January']['Open'], djia_data[djia_data['Month'] == 'January']['Close'], color = 'blue')
plt.scatter(djia_data[djia_data['Month'] != 'January']['Open'], djia_data[djia_data['Month'] != 'January']['Close'], color = 'gray')
plt.show()

Colormaps gebruiken
Colormaps zijn ingebouwde kleurenscha len in Matplotlib die numerieke waarden aan een kleurverloop koppelen (officiële documentatie). Voor een diepere blik, zie onze tutorial Matplotlib Colormaps. De colormaps zien er over het algemeen esthetisch goed samen uit en helpen een verhaal te vertellen in de stijgende waarden.
In het onderstaande voorbeeld gebruiken we een colormap door de slotkoers (y-variabele) door te geven aan het attribuut c, en de plasma-colormap via cmap. We zien dat naarmate de waarden toenemen, de bijbehorende kleur lichter en geler wordt, terwijl het lagere uiteinde paars en donkerder is.
plt.scatter(djia_data['Open'], djia_data['Close'], c=djia_data['Close'], cmap = plt.cm.plasma)
plt.show()
Aslimieten instellen
Soms is het handig om naar een specifiek bereik aan waarden in een plot te kijken. Als de DJIA bijvoorbeeld rond $30.000 handelt, kan het zijn dat we alleen gedrag rond die prijs belangrijk vinden. We kunnen een tuple doorgeven aan plt.xlim() en plt.ylim() om respectievelijk de x- en y-limieten in te stellen. De eerste waarde in de tuple is de ondergrens en de tweede waarde de bovengrens.
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.xlim((29000, 34000))
plt.ylim((29000, 34000))
plt.title('DJIA Open vs Close (Zoomed In)')
plt.xlabel('Open Price ($)')
plt.ylabel('Close Price ($)')
plt.show()
Plots opslaan
Als je tevreden bent met een plot, kun je hem opslaan naar een bestand. Matplotlib ondersteunt PNG, PDF, SVG en andere formaten via plt.savefig(). Het formaat wordt afgeleid van de bestandsextensie.
We kunnen plots die we in matplotlib maken opslaan met de methode plt.savefig(). We kunnen het bestand opslaan in veel verschillende bestandsformaten, waaronder ‘png’, ‘pdf’ en ‘svg’. Het eerste argument is de bestandsnaam. Het formaat wordt afgeleid van de bestandsextensie (of je kunt dit overschrijven met het argument format).
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.savefig('DJIA 2022 Scatterplot Open vs. Close.png')
Tot slot
Deze tutorial besprak lijnplots, staafplots en scatterplots, de drie grafiektypen waar je het vaakst naar zult grijpen. Matplotlib vereist meer code dan hoger-niveau bibliotheken zoals Seaborn of Plotly, maar die uitgebreidheid levert je pixel-nauwkeurige controle op over elk element in de figuur.
Vanaf hier raad ik aan om histogrammen, taartdiagrammen en colormaps te verkennen als volgende stappen. Als je een gestructureerde deep dive wilt, behandelt de cursus Introduction to Data Visualization with Matplotlib subplots, styling en het delen van figuren in vier uur.
Matplotlib FAQ
Wat is Matplotlib in Python?
Matplotlib is een populaire visualisatiebibliotheek voor data in Python. Het wordt vaak gebruikt om statische, interactieve en geanimeerde visualisaties in Python te maken. Met Matplotlib kun je met slechts een paar regels code grafieken, histogrammen, staafdiagrammen, scatterplots enz. genereren.
Waarom zou ik Matplotlib gebruiken voor datavisualisatie?
Daar zijn meerdere redenen voor. Ten eerste is Matplotlib flexibel. Het ondersteunt een breed scala aan grafieken en plots en integreert goed met veel andere Python-bibliotheken, zoals NumPy en pandas. Ten tweede is het een volwassen en veelgebruikte bibliotheek, met een sterke community en veel bronnen en tutorials. Tot slot kun je, omdat het in Python is, je plots automatiseren en aanpassen als onderdeel van je datapijplijnen.
Hoe installeer ik Matplotlib?
Je kunt Matplotlib installeren met pip, de pakketbeheerder van Python. Open je terminal en typ: pip install matplotlib. Als je een Jupyter-notebook gebruikt, kun je dit commando in een codecel uitvoeren door er een uitroepteken voor te zetten: !pip install matplotlib.
Hoe maak ik een basisplot in Matplotlib?
Hier is een eenvoudig voorbeeld. Eerst moet je de Matplotlib-bibliotheek importeren. De meest gebruikte module is pyplot, en die wordt doorgaans geïmporteerd met het alias plt:
import matplotlib.pyplot as plt
Vervolgens kun je zo een basislijnplot maken:
plt.plot([1, 2, 3, 4]) plt.ylabel('Some Numbers') plt.show()
In dit voorbeeld wordt plt.plot([1, 2, 3, 4]) gebruikt om de opgegeven lijst met getallen te plotten. De regel plt.ylabel('Some Numbers') stelt het label voor de y-as in, en plt.show() toont de plot.
Data Science-schrijver | Senior Technical Marketing Analyst bij Wayfair | MSE in Data Science aan de University of Pennsylvania


