Ga naar hoofdinhoud

Python Plotly Express-tutorial: Ontgrendel prachtige visualisaties

Leer hoe je zeer interactieve en visueel aantrekkelijke grafieken maakt met Python Plotly Express.
Bijgewerkt 2 okt 2026  · 10 min lezen

Verken met AI

ChatGPTClaudePerplexity

Plotly draait niet alleen om mooie visualisaties maken; het gaat erom het volledige potentieel van je data te benutten en inzichten te onthullen die anders verborgen zouden blijven. Het vormt de brug tussen de taal van cijfers en de taal van verhalen, en stelt individuen en organisaties in staat om weloverwogen beslissingen te nemen en betekenisvolle verandering te creëren.

Dat is de taal die ChatGPT gebruikt om Plotly te beschrijven. Duidelijk is dat Plotly een van de beste datavisualisatiebibliotheken is die er zijn.

Plotly Express

Het maakt zeer interactieve en visueel aantrekkelijke grafieken zoals die hieronder:

Vandaag leer je de basisprincipes van het maken van geweldige visuals met Plotly.

Basics van Plotly Express

Zoals bij elke andere tutorial beginnen we met het installeren van de bibliotheek via pip (of als je conda verkiest).

$ pip install --upgrade plotly
$ conda install -c conda-forge plotly

Plotly krijgt regelmatig updates, dus zorg ervoor dat de tag --upgrade is opgenomen als je de bibliotheek al hebt geïnstalleerd.

De tutorial richt zich op de Express API van Plotly, die in 2019 werd geïntroduceerd en tal van voordelen biedt ten opzichte van de oude manieren om met de core Plotly-bibliotheek te werken:

  • Eenvoudige syntax (leest bijna als Engels)
  • Groot scala aan visualisaties (of tools om je eigen te maken)
  • Automatische schaalverdeling voor assen en kleuren
  • Integratie met pandas (je kunt de Plotly-plotting-backend gebruiken voor de Pandas-functie .plot)

Hier is de anatomie van een basisplot in Plotly Express:

import plotly.express as px

fig = px.plotting_function(
    dataframe,
    x='column-for-xaxis',
    y='column-for-yaxis',
    title='Title For the Plot',
    width=width_in_pixels,
    height=height_in_pixels
)

fig.show()

Verschillende plots hebben hun eigen naam, zoals histogram of scatter onder de module express, geladen als px. Het eerste argument voor elke plotfunctie is de dataframe en de kolomnamen die voor de X- en Y-assen worden geplot.

Best practices schrijven voor dat je je plots een informatieve title geeft, zodat lezers weten waar de plot over gaat.

Zodra een plotfunctie wordt uitgevoerd, retourneert deze een Figure-object, waarop je de methode show aanroept om de plot in je notebook weer te geven.

Om te beginnen met het maken van plots hebben we een dataset nodig. Voor deze tutorial gebruiken we een Diamonds-dataset. Deze bevat een mooie combinatie van numerieke en categorische kenmerken - perfect voor dit artikel.

import pandas as pd

diamonds = pd.read_csv("data/diamonds.csv")

diamonds.head()

Data Set

De dataset bevat meer dan 53k diamanten met 10 fysieke eigenschappen. Hieronder kun je de basisstatistieken van de data verkennen.

diamonds.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 53940 entries, 0 to 53939
Data columns (total 10 columns):
#   Column   Non-Null Count  Dtype 
---  ------   --------------  ----- 
0   carat    53940 non-null  float64
1   cut      53940 non-null  object
2   color    53940 non-null  object
3   clarity  53940 non-null  object
4   depth    53940 non-null  float64
5   table    53940 non-null  float64
6   price    53940 non-null  int64 
7   x        53940 non-null  float64
8   y        53940 non-null  float64
9   z        53940 non-null  float64
dtypes: float64(6), int64(1), object(3)
memory usage: 4.1+ MB
diamonds.describe()

Een van de eerste dingen die je doet bij het uitvoeren van Exploratory Data Analysis (EDA) is het verkennen van individuele verdelingen.

Plotly biedt veel grafieken voor deze taak: histogrammen, boxplots, vioolplots, staafdiagrammen, enz. Laten we er een paar bekijken.

Histogrammen in Plotly Express

Een histogram is waarschijnlijk de allereerste visual die mensen leren.

Het ordent de waarden van een verdeling en plaatst ze in bins. Vervolgens worden balken gebruikt om weer te geven hoeveel waarden in elke bin vallen:

import plotly.express as px
​
fig = px.histogram(
  diamonds,
  x="price",
  title="Histogram of diamond prices",
  width=600,
  height=400,
)
​
fig.show()

Histogram Plotly Express

Als je over een balk zweeft, zie je het bereik van de bijbehorende bin. Plotly bepaalt automatisch het aantal bins, maar als je dit zelf wilt instellen, kun je de parameter nbins gebruiken.

Het is echter lastig om voor elke afzonderlijke verdeling het perfecte aantal bins te vinden. Daarom kun je de gangbare praktijk gebruiken om hetzelfde aantal bins in te stellen als de vierkantswortel van de lengte van de verdeling:

# Find the correct number of bins
nbins = int(len(diamonds) ** (1 / 2))
​
fig = px.histogram(
  diamonds,
  x="price",
  title="Histogram of diamond prices",
  nbins=nbins,
  width=600,
  height=400,
)
​
fig.show()

Staafdiagrammen in Plotly Express

Histogrammen analyseren kwantitatieve kenmerken. Voor de analyse van categorische data grijpen we naar staafdiagrammen. Als we bijvoorbeeld de categorische kolom cut doorgeven aan de functie histogram, krijgen we een type staafdiagram dat countplot heet. Ja, je raadt het al - het telt het aantal observaties in elke categorie.

fig = px.histogram(diamonds, x="cut")
​
fig.show()

Staafdiagram Plotly Express

Maar wacht, we hebben geen labels op de plot gezet! Laten we dat oplossen met de functie update_layout, die veel aspecten van een figuur kan aanpassen nadat deze is gemaakt.

fig.update_layout(
  title="The number of diamonds in each diamond cut category",
  xaxis_title="",
  yaxis_title="Count",
)

Staafdiagram Labels Plotly Express

Je weet al wat title doet. De xaxis_title en yaxis_title vervangen de labels van beide assen die door Plotly worden gegenereerd (dat zijn simpelweg de kolomnamen).

Laten we nu de gemiddelde prijs voor elke categorie diamantslijpsel bekijken. Eerst gebruiken we pandas groupby:

mean_prices = (
    diamonds.groupby("cut")["price"].mean().reset_index()
)

mean_prices

Groupby

Door de functie reset_index aan het einde van een groupby-operatie te ketenen, wordt de output een DataFrame en Plotly is dol op DataFrames. Laten we het dus doorgeven aan de functie bar:

fig = px.bar(mean_prices, x="cut", y="price")
​
fig.update_layout(
  title="Average diamond prices for each cut category",
  xaxis_title="",
  yaxis_title="Mean price ($)",
)
​
fig.show()

Gemiddelde prijs

bar neemt één categorisch en één numeriek kenmerk en maakt één balk voor elke rij in het doorgegeven DataFrame. Het resultaat is een prettig leesbare vergelijking van prijzen voor elk type diamant.

Boxplots in Plotly Express

Een andere veelgebruikte plot voor het analyseren van verdelingen is een boxplot, gemaakt met box in Plotly Express:

fig = px.box(diamonds, x="clarity", y="carat")
​
fig.update_layout(
  title="Distribution of diamond carats for each clarity category",
  xaxis_title="Clarity",
  yaxis_title="Carat",
)
​
fig.show()

Box Plot Plotly Express

In plaats van balken te maken die alleen het gemiddelde aantal karaat laten zien, toont de boxplot meerdere statistieken:

Box Plot Statistieken

Je ziet:

  • Minimum/maximum
  • Mediaan
  • 25e percentiel
  • 75e percentiel
  • en uitschieters

voor elke diamanthelderheidscategorie.

Vioolplots in Plotly Express

Een andere leuke grafiek om verdelingen te verkennen is een vioolplot. Vioolplots zijn in feite boxplots met een paar extra accenten:

fig = px.violin(diamonds, x="cut", y="price")
​
fig.show()

Violin Plot Plotly Express

In plaats van een box weer te geven, toont hij een vloeiende curve die de dichtheid van een kenmerk aangeeft. Om een boxplot erin te plaatsen, kun je het attribuut box op True zetten:

fig = px.violin(diamonds, x="cut", y="price", box=True)
​
fig.show()

Violin Box Plot Plotly Express

In tegenstelling tot boxplots, die alleen samenvattende statistieken tonen, laten vioolplots ook de vorm van de verdeling zien.

Relaties tussen kenmerken visualiseren in Plotly Express

Je begint nieuwe patronen en inzichten te zien wanneer je kenmerken plot die nauw met elkaar verbonden zijn. Als we bijvoorbeeld aannemen dat het karaat (gewicht) van de diamant de belangrijkste factor is die de prijs bepaalt, laten we die relatie dan verkennen.

Scatterplots in Plotly Express

We kunnen een scatterplot (px.scatter) gebruiken die alle diamanten in de dataset als punten plot. De positie van de punten wordt bepaald door hun bijbehorende prijs- en karaatwaarden:

fig = px.scatter(diamonds, x="price", y="carat")
​
fig.update_layout(
  title="Price vs. Carat",
  xaxis_title="Price ($)",
  yaxis_title="Carat",
)
​
fig.show()

Scatter Plot Plotly Express

We hebben last van een ernstig geval van overplotting, wat gebeurt wanneer er te veel data in één plot wordt weergegeven. In plaats van echte patronen en trends te tonen, worden ze door overplotting juist verhuld.

Dat lossen we op door slechts ~10% van de dataset te plotten, wat genoeg is om eventuele patronen te laten zien:

fig = px.scatter(
  diamonds.sample(5000), x="price", y="carat"
)
​
fig.update_layout(
  title="Price vs. Carat",
  xaxis_title="Price ($)",
  yaxis_title="Carat",
)
​
fig.show()

Scatterplot 10 procent

In de aanroep naar scatter geven we slechts 5000 rijen door (.sample(5000)), wat een lichte opwaartse trend in de prijs-karaatrelatie laat zien.

Heatmaps in Plotly Express

Heatmaps zijn geweldig voor het visualiseren van complexe datasets, zoals een grote matrix waarin het lastig is om patronen te zien door een stortvloed aan getallen in cellen.

Een heatmap kent kleuren toe op basis van de grootte van elke cel in een matrix. Een scenario waarin dit nuttig kan zijn, is het bekijken van de correlatiematrix van een dataset.

Een correlatie meet de lineaire relatie tussen numerieke kenmerken. Elke cel van de correlatiematrix vertegenwoordigt dus de correlatie tussen een paar kenmerken.

Je kunt de correlatiematrix van elke dataset berekenen met de methode corr van pandas, die een DataFrame teruggeeft. Als je die doorgeeft aan de functie imshow van Express, krijg je een heatmap:

import plotly.express as px
​
# Create heatmap using Plotly Express
fig = px.imshow(
  diamonds.corr(),
  color_continuous_scale="Inferno_r",
)
​
# Show plot
fig.show()

Heatmap Plotly Express

De correlatie loopt van -1 tot 1. Waarden dicht bij de randen van dit bereik duiden op een sterke positieve of negatieve lineaire relatie tussen kenmerken.

We kiezen de omgekeerde Inferno-kleurenkaart voor de parameter color_continuous_scale. Je kunt andere kleurenkaarten kiezen van de color scale-pagina van de Plotly-docs.

Plots aanpassen in Plotly Express

Een van de grootste pluspunten van de Plotly Express API is het eenvoudig aanpassen van plots.

De functie update_layout bevat veel parameters waarmee je vrijwel elk aspect van je grafieken kunt wijzigen.

Afhankelijk van waar je plots worden weergegeven, is het jouw taak om ze representatief te maken voor elk publiek, elke locatie of elk medium.

Een van de eerste dingen om te kiezen is het plotthema. Thema's in Plotly zijn standaardconfiguraties voor grafieken die bijna alle componenten aansturen.

Je kunt het wijzigen met de parameter template van elke plotfunctie:

sample = diamonds.sample(3000)
​
fig = px.scatter(
  sample, x="price", y="carat", template="ggplot2"
)
​
fig.show()

Plotthema Plotly Express

Populaire zijn onder andere ggplot2, seaborn, plotly_dark en presentation. Je kunt de volledige lijst zien door plotly.io.templates aan te roepen.

Kleuren

Onze scatterplots waren tot nu toe tweedimensionaal. Maar we kunnen er extra informatie aan toevoegen via kleur.

Zo kunnen we elk punt in de plot kleuren op basis van de categorie waartoe de diamant behoort. Hiervoor hoef je alleen cut door te geven aan de parameter color:

sample = diamonds.sample(3000)
​
fig = px.scatter(sample, x="price", y="carat", color="cut")
​
fig.show()

Kleuren Plotly Express

De parameter cut forceert ook een legenda op de plot, die de categoriekleuren toont.

Markergrootte

Een andere benadering is een numeriek kenmerk tonen via de grootte van de punten.

Door de parameter size op carat te zetten, krijgen we punten met verschillende grootte op basis van het karaat van de diamant:

fig = px.scatter(sample, x="price", y="x", size="carat")
​
fig.show()

Markergrootte Plotly Express

En als we zowel kleur als grootte gebruiken? Zeker!

fig = px.scatter(
  sample, x="price", y="x", size="carat", color="cut"
)
​
fig.show()

Grootte en kleur

Maar deze plot is niet erg informatief, omdat hij te veel informatie bevat om met het blote oog te verwerken. Het is goede praktijk om niet meer dan drie kenmerken in één enkele plot te stoppen.

Conclusie

Gefeliciteerd dat je het tot het einde hebt gehaald! Je hebt in deze tutorial genoeg geleerd om zelfstandig verder te gaan met Plotly via enkele van onze andere resources:

Je kunt ook meer leren over Plotly’s Graph Objects API, voor meer aanpassingsopties, volledige controle over interactiviteit en animaties, en ondersteuning voor geavanceerde visualisatietypen.

Onderwerpen
Python
Datavisualisatie

Python-cursussen

Cursus

Dashboards bouwen met Dash en Plotly

4 uur
17K
Leer hoe je interactieve dashboards vol inzichten bouwt met Dash en Plotly.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken