Cursus
Histogrammen zijn populaire grafische weergaven van datapunten, geordend in opgegeven bereiken. We zien ze meestal in de statistiek, waar ze laten zien hoeveel van een bepaald type variabele binnen een bepaald bereik voorkomt. Je wiskundeleraar van vroeger gebruikte misschien een histogram om het aantal behaalde cijfers voor iedereen in je klas te visualiseren.

Figuur 1: Een voorbeeld van een histogram dat de verdeling van cijfers voor een klas weergeeft.
[Bron: Voorbeeldhistogram met Matplotlib]
De kenmerkende balken met verschillende hoogtes lijken op staafdiagrammen, met dit verschil dat histogrammen worden gebruikt om kwantitatieve gegevens te visualiseren in plaats van categorische gegevens – wat wel het geval is bij staafdiagrammen.
Over het algemeen zijn numerieke gegevens in histogrammen continu, wat betekent dat ze oneindig veel waarden kunnen hebben. Het proberen te plotten van alle waarden van continue variabelen is vaak onpraktisch. Histogrammen lossen dit op door meerdere datapunten te groeperen in logische bereiken (zogeheten bins), zodat ze gevisualiseerd kunnen worden.
In deze tutorial behandelen we hoe je histogrammen in Python maakt met de Plotly-bibliotheek voor datavisualisatie. We bespreken ook verschillende manieren om je Plotly-histogram aan te passen en waarom datavisualisatie überhaupt belangrijk is.
Bekijk deze DataLab-werkmap om mee te coderen met de voorbeelden in deze tutorial.
Het belang van datavisualisatie in data-analyse
Geen enkel bedrijf kan beweren dat het niet baat heeft bij een beter begrip van zijn data. De rol van data-analyse is om bedrijven te helpen hun prestaties te optimaliseren en hun resultaten te verbeteren; deze discipline strekt zich uit over alle domeinen waar data bestaan, omdat inzicht doorgaans als een voordeel wordt gezien.
Datavisualisaties zijn de grafische representaties die analisten gebruiken om informatie en data te presenteren. Het doel is data samen te vatten in een makkelijk te begrijpen format, waarbij de belangrijkste lessen voor de lezer worden uitgelicht.
Met andere woorden: bedrijven gebruiken datavisualisaties om snel datatrends te identificeren die zonder visuele hulp lastig te zien zouden zijn. Grafische weergaven maken het eenvoudig om informatie op een universele, snelle en effectieve manier te communiceren.
Een introductie tot Plotly
Plotly is een interactieve, open-source bibliotheek voor datavisualisatie voor Python en R, geschreven in JavaScript. In dit artikel richten we ons op Plotly Python, ook wel “plotly.py” genoemd om het te onderscheiden van de JavaScript-tegenhanger.
Tip: Volg de cursussen Introductie tot datavisualisatie met Plotly in Python of Interactieve datavisualisatie met Plotly in R om met Plotly aan de slag te gaan.
Veel gebruikers van Plotly geven aan dat ze aanvankelijk “gegrepen” werden door de moderne esthetiek die de bibliotheek storytellers gemakkelijk laat toepassen. Met Plotly Python kun je aantrekkelijke, interactieve webgebaseerde visualisaties maken die kunnen worden:
- weergegeven in Jupyter-notebooks,
- opgeslagen als zelfstandige HTML-bestanden,
- gebruikt als onderdeel van puur in Python gebouwde webapplicaties met Dash.
Een ander sterk punt van Plotly is het grote aantal beschikbare grafiektypen. De bibliotheek ondersteunt meer dan 40 unieke grafieken voor uiteenlopende use-cases, waaronder statistiek, finance, geografie, wetenschap en 3D-grafieken.
Visualisaties die met Plotly zijn gemaakt, zijn eenvoudig te exporteren dankzij de diepe integratie met Kaleido – een hulpprogramma voor beeldexport. Er is ook uitgebreide ondersteuning voor niet-webcontexten, waaronder desktopeditors (zoals Spyder, PyCharm, enz.) en het publiceren van statische documenten (zoals het exporteren van Jupyter-notebooks naar PDF).
Het installeren van plotly.py is vrij eenvoudig; je kunt het installeren met pip:
pip install plotly>=5.11.0, <5.12.0
Of met Conda:
conda install -c plotly plotly>=5.11.0, <5.12.0
Opmerking: Het is aan te raden om libraries in een virtuele omgeving te installeren, zodat de afhankelijkheden per project gescheiden blijven. Je kunt ook starten met een DataLab-werkmap - een Python- & R-IDE voor data science in de cloud.
DataLab gebruiken
DataLab is een online Integrated Development Environment (IDE) waarin je code kunt schrijven, data alleen of samen kunt analyseren en inzichten kunt delen. Je kunt DataLab zien als een soort Google Docs, speciaal gemaakt voor data science; lees meer over hoe het werkt in ons artikel DataLab gebruiken in het onderwijs.
Voor deze taak moeten we een werkmap maken op basis van een dataset. Gelukkig biedt DataCamp een rijke en groeiende verzameling interessante datasets om te analyseren. Wanneer we een werkmap vanuit een dataset maken, bevat de omgeving alle vooraf geconfigureerde data en een korte beschrijving ervan, zodat je meteen praktisch aan de slag kunt.
De stappen om een werkmap te maken met een DataCamp-dataset zijn als volgt:
- Selecteer in de DataLab-app "Datasets" in de zijbalk.
- Kies een dataset waarin je geïnteresseerd bent. Er verschijnt een dialoogvenster met een voorbeeld van de geselecteerde dataset, inclusief een datadictionary en een link naar de bron, een mogelijke taalkeuze (Python of R) en een overzicht van publicaties die andere gebruikers met deze dataset hebben gemaakt.
- Selecteer Create workbook.

Figuur 2: Een GIF die de stappen laat zien om een werkmap te maken vanuit een dataset.
Opmerking: Bekijk Een Plotly-histogram maken met Olympics-data om met de code mee te gaan.
We gebruiken de Olympics Data-dataset uit de interne datacollectie van DataCamp. Volgens de beschrijving is dit een historische dataset over de moderne Olympische Spelen, van Athene 1896 tot Rio 2016. Elke rij bestaat uit een individuele atleet (271116 instanties) die meedoet aan een olympisch evenement en welke medaille is gewonnen (indien van toepassing).
De kolommen bestaan uit het volgende:
|
Kolom |
Uitleg |
|
id |
Uniek nummer voor elke atleet |
|
name |
Naam van de atleet |
|
sex |
M of F |
|
age |
Leeftijd van de atleet |
|
height |
In centimeters |
|
weight |
In kilograms |
|
team |
Teamnaam |
|
noc |
Nationaal Olympisch Comité 3 |
|
games |
Jaar en seizoen |
|
year |
Integer |
|
season |
Zomer of Winter |
|
city |
Gaststad |
|
sport |
Sport |
|
event |
Onderdeel |
|
medal |
Gold, Silver, Bronze of NA |
Met onze huidige kennis kunnen we verwachten een histogram te maken van de kolommen: age, height, weight en year. Dit komt doordat histogrammen zijn opgebouwd met continue numerieke waarden: ze worden gebruikt om de verdeling van numerieke data weer te geven, waarbij de data in bins worden ingedeeld en het aantal per bin wordt getoond.
We gebruiken de kolom age om ons histogram te maken.
Een Plotly-histogram maken
Een histogram maken in Python met Plotly is vrij eenvoudig; we kunnen Plotly Express gebruiken, een gebruiksvriendelijke high-level interface…
import plotly.express as px
# Create a histogram
fig = px.histogram(olympic_data.age, x="age",
title="Distribution of Athletes age")
fig.show()
Figuur 3: Een histogram gemaakt met Plotly Express
We kunnen ook Graph Objects gebruiken.
import plotly.graph_objects as go
fig = go.Figure(data=[go.Histogram(x=olympic_data.age)])
# add the title
fig.update_layout(title=dict(text="Distribution of Athletes age"))
fig.show()
Figuur 4: Een histogram gemaakt met Plotly Graph Objects.
Plotly-express-functies doen intern aanroepen naar graph_objects, die een waarde retourneren. Daarom zijn Plotly Express-functies handig: ze stellen je in staat om visualisaties te tekenen die anders meer regels code zouden vergen als je graph_objects direct zou gebruiken.
“De module plotly.express (meestal geïmporteerd als px) bevat functies die in één keer volledige figuren kunnen maken en wordt Plotly Express of PX genoemd. Plotly Express is een ingebouwd onderdeel van de Plotly-bibliotheek en is het aanbevolen startpunt voor het maken van de meeste gangbare figuren. Elke Plotly Express-functie gebruikt intern graph objects en retourneert een instantie van plotly.graph_objects.Figure.”
Bron: Plotly Express in Python.
Hoewel Plotly express het aanbevolen startpunt is voor de Plotly-bibliotheek, gebruiken we graph_objects om het uiterlijk van ons histogram aan te passen, omdat dit meer flexibiliteit biedt.
Het uiterlijk van het Plotly-histogram aanpassen
Op dit moment is ons histogram vrij kaal. Laten we het opvrolijken door de lettertypen voor onze titel te wijzigen en aslabels toe te voegen.
# Create histogram
fig = go.Figure(data=[go.Histogram(x=olympic_data.age)])
fig.update_layout(
# Set the global font
font = {
"family":"Times new Roman",
"size":16
},
# Update title font
title = {
"text": "Distribution of Athletes age",
"y": 0.9, # Sets the y position with respect to `yref`
"x": 0.5, # Sets the x position of title with respect to `xref`
"xanchor":"center", # Sets the title's horizontal alignment with respect to its x position
"yanchor": "top", # Sets the title's vertical alignment with respect to its y position. "
"font": { # Only configures font for title
"family":"Arial",
"size":20,
"color": "red"
}
}
)
# Add X and Y labels
fig.update_xaxes(title_text="Age")
fig.update_yaxes(title_text="Number of Athletes")
# Display plot
fig.show()
Figuur 5: Plotly-histogram met een bijgewerkte titel en toegevoegde aslabels.
Met deze toevoegingen is ons histogram informatiever.
Vervolgens veranderen we de grootte van elke bin.
# Create histogram
fig = go.Figure(data = [
go.Histogram(
x = olympic_data.age,
xbins=go.histogram.XBins(size=5) # Change the bin size to 5
)
]
)
Figuur 6: Plotly-histogram met bingrootte gelijk aan 5.
In de bovenstaande code hebben we de parameter xbins in de instantie go.Histogram ingesteld op een instantie van go.histogram.Xbins en de gewenste bingrootte als parameter van die instantie gedefinieerd. Merk op dat we deze stap ook hadden kunnen uitvoeren met een dict-object met compatibele eigenschappen.
Tot slot veranderen we de kleur van de bins naar oranje zodat de visualisatie wat meer opvalt.
# Create histogram
fig = go.Figure(data = [
go.Histogram(
x = olympic_data.age,
xbins=go.histogram.XBins(size=5), # Change the bin size
marker=go.histogram.Marker(color="orange") # Change the color
)
]
)
Figuur 7: Plotly-histogram met oranje bins.
Veel beter.
In de bovenstaande code hebben we de parameter marker in de instantie go.Histogram ingesteld op een instantie van go.histogram.Marker en de gewenste kleur als parameter van die instantie gedefinieerd.
Er zijn echter nog veel meer aanpassingen mogelijk voor ons Plotly-histogram, zoals het toevoegen van hovertekst.
Hovertekst inschakelen
Telkens wanneer je over een balk in het huidige histogram beweegt, wordt tekst weergegeven die aangeeft wat elke balk voorstelt – zie Figuur 8.

Figuur 8: De huidige hovertekst die wordt weergegeven wanneer je over ons histogram beweegt.
Dit is niet erg intuïtief. Bij datavisualisatie willen we dat onze grafieken zichzelf verklaren – tot en met de hovertekst. Laten we daarom de informatie bijwerken die wordt getoond wanneer we over een bin bewegen.
# Create histogram
fig = go.Figure(data = [
go.Histogram(
x = olympic_data.age,
xbins=go.histogram.XBins(size=5), # Change the bin size
marker=go.histogram.Marker(color="orange"), # Change the color
hovertemplate="<br>".join([
"Age Range: %{x}",
"Number of Athletes: %{y}"]) # Make hover text more informative
)
]
)
Figuur 9: De bijgewerkte hovertekst.
De tekst die wordt getoond wanneer we over een bin bewegen is nu veel informatiever, waardoor onze visualisatie makkelijker te interpreteren is. We deden dit door de parameter hovertemplate in onze go.Histogram-instantie bij te werken.
Filteropties toevoegen
Eerder in de tutorial zeiden we dat we konden verwachten een histogram te maken met de kenmerken age, height, weight en year. We hoeven daarvoor niet voor elk een apart histogram te bouwen.
In plaats daarvan kunnen we één histogram bouwen en filterknoppen toevoegen waarmee je kunt schakelen welk kenmerk in de visualisatie wordt weergegeven.
Zo ziet dat eruit in code.
"""
Starter code provided by vestland on StackOverflow
Link: https://bit.ly/3ipqOMo
"""
# continuous features
continuous_vars = ["age", "height", "weight", "year"]
# plotly
fig = go.Figure()
# set up ONE trace
fig.add_trace(
go.Histogram(x = olympic_data.age,
xbins=go.histogram.XBins(size=5), # Change the bin size
marker=go.histogram.Marker(color="orange"), # Change the color
)
)
buttons = []
# button with one option for each dataframe
for col in continuous_vars:
buttons.append(dict(method='restyle',
label=col,
visible=True,
args=[{"x":[olympic_data[col]],
"type":'histogram', [0]],
)
)
# some adjustments to the updatemenus
updatemenu = []
your_menu = dict()
updatemenu.append(your_menu)
updatemenu[0]['buttons'] = buttons
updatemenu[0]['direction'] = 'down'
updatemenu[0]['showactive'] = True
# add dropdown menus to the figure
fig.update_layout(showlegend=False, updatemenus=updatemenu)
fig.show()
Figuur 10: Het histogram met filters waarmee gebruikers in één visualisatie tussen verschillende kenmerken kunnen schakelen.
En dat is het; bekijk vooral de werkmap Een Plotly-histogram maken met Olympics-data, en ga zelf aan de slag met wat we in deze tutorial hebben gebouwd.
Afsluiting
Je weet nu hoe je een histogram maakt in Plotly Python; in deze tutorial hebben we behandeld:
- Wat een histogram is en hoe het werkt
- Het belang van datavisualisatie in data-analyse
- Hoe je met DataLab aan de slag gaat
- Hoe je een histogram maakt in Plotly
- Verschillende manieren om je histogram aan te passen
- Hoe je filters toepast
Zoek je meer bronnen over het maken van histogrammen of het gebruik van Plotly? Bekijk dan de links hieronder:
