Cursus
In dit artikel neem ik je mee langs bargrafieken in Python met de bekendste libraries: Matplotlib, Seaborn, Plotly, Plotnine en Pandas. Je kunt de visuals bekijken en kiezen welke library je het prettigst vindt. Voor elke methode begin ik met de basis voor het maken van eenvoudige bargrafieken en ga ik daarna stap voor stap in op aanpassingstechnieken.
Ik ben zo volledig en duidelijk mogelijk, maar onthoud dat bargrafieken slechts één onderdeel zijn van data-analyse en data science. Wil je een breed overzicht, oefenen met echte datasets, een felbegeerd certificaat behalen en een carrière in het vak starten, schrijf je dan vandaag nog in voor onze Associate Data Scientist in Python-carrièreroute.
Manieren om een Python-bargrafiek te maken
We bekijken hoe je bargrafieken maakt en aanpast met enkele van de populairste Python-libraries. Elke library biedt unieke functies en verschillende niveaus van aanpasbaarheid.
Maak een staafdiagram met Matplotlib
Ik begin met Matplotlib, een fundamentele plottinglibrary in Python met veel aanpassingsopties.
Basis-bargrafieken
Om te starten met Matplotlib importeer je de benodigde libraries. De pyplot-module uit Matplotlib biedt functies voor het maken van grafieken. In dit voorbeeld gebruiken we voorbeelddata met het aantal mensen dat verschillende visualisatielibraries verkiest. De lijst library bevat de namen van de libraries, die als labels op de x-as verschijnen, en de lijst chosen_by bevat het overeenkomstige aantal liefhebbers, weergegeven als balkhoogtes op de y-as.
import matplotlib.pyplot as plt
# Number of preferences for different libraries
library = ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine']
chosen_by = [2500, 1800, 3000, 2200]
Een verticale bargrafiek maak je door de functie plt.bar() aan te roepen met de namen van de libraries en de voorkeursdata. Ik kies de kleur skyblue. Met plt.xlabel(), plt.ylabel() en plt.title() voeg je labels toe aan de x- en y-as en stel je een titel in. Tot slot toont plt.show() de grafiek.
# Vertical Bar Plot
plt.bar(library, chosen_by, color='skyblue')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.title('Which Visualization Library Do People Prefer?')
plt.show()

Op vergelijkbare wijze kun je met plt.barh() een horizontale bargrafiek maken. Hiervoor gebruik ik een lichtgroene kleur voor de balken.
# Horizontal Bar Plot
plt.barh(library, chosen_by, color='lightgreen')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.title('Which Visualization Library Do People Prefer?')
plt.show()

Geavanceerde aanpassingen
Matplotlib biedt een breed scala aan aanpassingen, zoals annotaties toevoegen en aslabels, titels en legenda's aanpassen. Je kunt bijvoorbeeld annotaties aan elke balk toevoegen met plt.text(), waarmee je tekst op opgegeven coördinaten plaatst.
plt.bar(library, chosen_by, color='skyblue')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.title('Which Visualization Library Do People Prefer?')
# Adding annotations
for i, value in enumerate(chosen_by):
plt.text(i, value + 5, str(value), ha='center')
plt.show()

In de code hierboven wordt plt.text() gebruikt om het aantal liefhebbers boven elke balk te tonen. De functie enumerate() geeft de index en waarde van elke balk, zodat de tekst correct wordt gepositioneerd.
Gegroepeerde en gestapelde bargrafieken
Om gegroepeerde en gestapelde bargrafieken met Matplotlib te maken, kun je extra parameters gebruiken om meerdere categorieën te tonen, zoals verschillende regio's of demografieën. Stel dat je data hebt over de populariteit van visualisatielibraries in verschillende regio's. Voor gegroepeerde bargrafieken definieer je aparte datasets per regio en gebruik je bar_width om de afstand en uitlijning van de balken te regelen, zodat elke groep naast elkaar staat voor een makkelijke vergelijking.
import numpy as np
# Define library names
library = ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine']
# Number of Enthusiasts for different regions
enthusiasts_north = [2000, 1500, 2500, 2000]
enthusiasts_south = [1500, 1300, 2000, 1800]
bar_width = 0.35
x = np.arange(len(library))
# Grouped Bar Plot
plt.bar(x - bar_width/2, enthusiasts_north, bar_width, label='North Region', color='skyblue')
plt.bar(x + bar_width/2, enthusiasts_south, bar_width, label='South Region', color='lightgreen')
# Adding labels and title
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.title('Regional Preferences for Visualization Libraries (Grouped)')
plt.xticks(x, library)
plt.legend(title='Regions')
plt.show()

In dit voorbeeld maakt x = np.arange(len(library)) een array met posities voor de balken. De functie plt.bar() wordt twee keer gebruikt om de balken per regio te maken en met plt.xticks() stel je de labels op de x-as in. De functie plt.legend() toont een legenda om de regio's te onderscheiden.
Voor een gestapelde bargrafiek kun je de parameter bottom gebruiken om de ene dataset op de andere te stapelen. Zo kun je het aantal liefhebbers uit verschillende regio's gestapeld per library visualiseren.
# Define library names
library = ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine']
# Number of Enthusiasts for different regions
enthusiasts_north = [2000, 1500, 2500, 2000]
enthusiasts_south = [1500, 1300, 2000, 1800]
x = np.arange(len(library))
# Stacked Bar Plot
plt.bar(x, enthusiasts_north, label='North Region', color='skyblue')
plt.bar(x, enthusiasts_south, bottom=enthusiasts_north, label='South Region', color='lightcoral')
# Adding labels and title
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.title('Regional Preferences for Visualization Libraries (Stacked)')
plt.legend()
plt.show()

In deze gestapelde bargrafiek vertegenwoordigt enthusiasts_south de data voor liefhebbers in het zuiden, terwijl enthusiasts_north de basisdata is voor het noorden. De functie plt.bra() wordt eerst aangeroepen om de balken voor het noorden te maken en daarna nog eens om de balken voor het zuiden erbovenop te stapelen.
Voor een uitgebreidere uitleg over het gebruik van de Python-library Matplotlib kun je onze cursus Introduction to Data Visualization with Matplotlib volgen. Er is ook onze Matplotlib Cheat Sheet, die het proces in zes basisstappen opdeelt.
Bargrafieken maken met Seaborn
Seaborn is een visualisatielibrary boven op Matplotlib die het maken van mooie bargrafieken vereenvoudigt.
Basis-bargrafieken
Met Seaborns functie barplot() maak je eenvoudig basis-bargrafieken met minimale code. Importeer eerst de Seaborn-library en maak een dictionary.
import seaborn as sns
data = {'Library': library, 'Chosen by': chosen_by}
Gebruik vervolgens de functie sns.barplot() om de bargrafiek te maken, waarbij je de x- en y-variabelen en de databron aangeeft. Hier gebruik ik het kleurenpalet viridis.
sns.barplot(x='Library', y='Chosen by', data=data, palette='viridis')
plt.title('Which Visualization Library Do People Prefer?')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.show()

Je kunt ervoor kiezen geen waarde aan palette toe te voegen en dan krijg je een uniforme kleur in je grafiek, of — nog beter — een kleur aan de bargrafiek toekennen. In dit geval gebruik ik een hexcode:
sns.barplot(x='Library', y='Chosen by', data=data, color=’#5EB1FF’)
plt.title('Which Visualization Library Do People Prefer?')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.show()

Geavanceerde aanpassing
Seaborn biedt natuurlijk ook uitgebreide aanpassingsopties, waaronder kleuren en annotaties. Je kunt bijvoorbeeld annotaties toevoegen aan de bargrafiek, net zoals in Matplotlib.
# Customized Bar Plot
sns.barplot(x='Library', y='Chosen by', data=data, palette='viridis')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.title('Which Visualization Library Do People Prefer?')
# Adding annotations
for i, value in enumerate(chosen_by):
plt.text(i, value + 5, str(value), ha='center')
plt.show()

In dit voorbeeld verandert de parameter palette='viridis' het kleurenpalet van de balken en voegt de functie plt.text() annotaties toe aan elke balk.
Je kunt onze cursus Introduction to Data Visualization with Seaborn volgen voor veel meer details. Wil je je Seaborn-bargrafiek extra mooi maken, gebruik dan onze Seaborn-kleurenpaletten: snelle gids voor het kiezen van kleuren voor goede ideeën.
Bargrafieken maken met Plotly
Vervolgens komt Plotly, een library die bekendstaat om interactieve en dynamische visualisaties, waaronder bargrafieken.
Basis-bargrafieken
Een basis-bargrafiek met Plotly maak je met de module graph_objects. We importeren de benodigde module en maken een bargrafiek met een hemelsblauwe kleur voor de balken.
import plotly.graph_objects as go
fig = go.Figure(go.Bar(x=library, y=chosen_by, marker_color='skyblue'))
fig.update_layout(title='Which Visualization Library Do People Prefer?', xaxis_title='Visualization Library', yaxis_title='Number of Enthusiasts')
fig.show()

Geavanceerde aanpassing
Plotly biedt manieren om de interactiviteit en uitstraling van bargrafieken te verbeteren. Zo kun je annotaties aan de balken toevoegen met de functie fig.add_annotation().
fig = go.Figure(go.Bar(x=library, y=chosen_by, marker_color='skyblue'))
fig.update_layout(title='Which Visualization Library Do People Prefer?', xaxis_title='Visualization Library', yaxis_title='Number of Enthusiasts')
# Adding annotations
for i, value in enumerate(chosen_by):
fig.add_annotation(x=library[i], y=value, text=str(value), showarrow=False, yshift=10)
fig.show()

Dynamische en interactieve bargrafieken
Plotly kan dynamische bargrafieken maken die realtime updaten, ideaal voor dashboards. Met Plotly Express, een high-level interface voor Plotly, kun je met minimale code interactieve bargrafieken maken.
import plotly.express as px
# Using a sample dataset from Plotly
df = px.data.gapminder().query("year == 2007")
fig = px.bar(df, x='continent', y='pop', color='continent', hover_name='country', title='Population by Continent in 2007')
fig.show()

In dit voorbeeld laadt de functie px.data.gapminder() een voorbeelddataset van Plotly. De functie px.bar() maakt een interactieve bargrafiek met de opgegeven x- en y-variabelen, kleur, hover-naam en titel. We hebben een uitgebreide cursus bij DataCammp als je meer wilt zien: Introduction to Data Visualization with Plotly.
Bargrafieken maken met Plotnine
Plotnine is een implementatie van de grammar of graphics in Python, geïnspireerd op ggplot2 in R. Het biedt een declaratieve manier om complexe grafieken te maken door verschillende plotelementen te combineren.
Basis-bargrafieken
Om met Plotnine te beginnen, importeer je de benodigde libraries en maak je een DataFrame. Definieer daarna een ggplot-object, voeg een geom_bar-laag toe en specificeer de esthetiek.
from plotnine import ggplot, aes, geom_bar, labs
import pandas as pd
# Number of preferences for different libraries
data = pd.DataFrame({'Library': ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine'],
'Chosen by': [2500, 1800, 3000, 2200]})
# Basic Bar Plot
ggplot(data, aes(x='Library', y='Chosen by')) + geom_bar(stat='identity', fill='skyblue') + labs(title='Which Visualization Library Do People Prefer?', x='Visualization Library', y='Number of Enthusiasts')

In dit voorbeeld stelt aes(x='Library', y='Chosen by') de x- en y-esthetiek van de grafiek in. Het deel geom_bar(stat='identity', fill='skyblue') maakt een bargrafiek met een hemelsblauwe vulkleur.
Geavanceerde aanpassing
Je kunt aanpassen met Plotnines gelaagde aanpak. Je kunt annotaties, aslabels, titels en legenda's toevoegen.
from plotnine import ggplot, aes, geom_bar, geom_text, labs
# Creating our Pandas DataFrame
data = pd.DataFrame({'Library': ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine'],
'Chosen by': [2500, 1800, 3000, 2200]})
# Basic Bar Plot with labels
(ggplot(data, aes(x='Library', y='Chosen by'))
+ geom_bar(stat='identity', fill='skyblue')
+ geom_text(aes(label='Chosen by'), va='bottom', size=10, nudge_y=5) # Adds labels on top of bars
+ labs(title='Which Visualization Library Do People Prefer?', x='Visualization Library', y='Number of Enthusiasts'))

Gegroepeerde en gestapelde bargrafieken
Plotnine ondersteunt ook gegroepeerde en gestapelde bargrafieken. Voor gegroepeerde bargrafieken definieer je eerst een categorische variabele om op te groeperen.
# Number of preferences for different libraries in different regions
data = pd.DataFrame({'Library': ['Matplotlib', 'Plotly', 'Plotnine', 'Seaborn'] * 2,
'Chosen by': [2000, 1500, 2500, 2000, 1500, 1300, 2000, 1800],
'Region': ['North', 'North', 'North', 'North', 'South', 'South', 'South', 'South']})
# Grouped Bar Plot
(ggplot(data, aes(x='Library', y='Chosen by', fill='Region'))
+ geom_bar(stat='identity', position='dodge')
+ labs(title='Regional Preferences for Visualization Libraries (Grouped)', x='Visualization Library', y='Number of Enthusiasts'))

Voor gestapelde bargrafieken kun je position = 'stack' gebruiken.
# Stacked Bar Plot
(ggplot(data, aes(x='Library', y='Chosen by', fill='Region'))
+ geom_bar(stat='identity', position='stack')
+ labs(title='Regional Preferences for Visualization Libraries (Stacked)', x='Visualization Library', y='Number of Enthusiasts'))

Je ziet dat in deze voorbeelden position = 'dodge' gegroepeerde balken maakt, terwijl position = 'stack' de balken stapelt.
Bargrafieken maken met Pandas
Last but not least: Pandas. Pandas biedt een handige manier om rechtstreeks vanuit DataFrames bargrafieken te maken; het is dus een snelle en eenvoudige optie voor basisgrafieken.
Basis-bargrafieken
Voor een bargrafiek in Pandas kun je de functie plot.bar() op een DataFrame gebruiken.
import pandas as pd
data = pd.DataFrame({'Library': ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine'],
'Chosen by': [2500, 1800, 3000, 2200]})
Maak daarna een bargrafiek met plot.bar().
# Basic Bar Plot
data.plot.bar(x='Library', y='Chosen by', color='skyblue', title='Which Visualization Library Do People Prefer?')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.show()

Geavanceerde aanpassing
Pandas laat aanpassingen aan bargrafieken toe via extra parameters en integratie met Matplotlib.
# Customized Bar Plot
ax = data.plot.bar(x='Library', y='Chosen by', color='skyblue', title='Which Visualization Library Do People Prefer?')
ax.set_xlabel('Visualization Library')
ax.set_ylabel('Number of Enthusiasts')
# Adding annotations
for i in ax.containers:
ax.bar_label(i, label_type='edge')
plt.show()

In dit voorbeeld voegt ax.bar_label(i, label_type='edge') annotaties toe aan de balken, waardoor het aantal boven elke balk wordt weergegeven.
Gegroepeerde en gestapelde bargrafieken
Gegroepeerde en gestapelde bargrafieken maken in Pandas is eenvoudig. Voor gegroepeerde bargrafieken moet je het DataFrame pivots zodat er aparte kolommen per groep zijn.
# Number of preferences for different libraries in different regions
data = pd.DataFrame({'Library': ['Matplotlib', 'Seaborn', 'Plotly', 'Plotnine'],
'North Region': [2000, 1500, 2500, 2000],
'South Region': [1500, 1300, 2000, 1800]})
# Grouped Bar Plot
data.plot.bar(x='Library', y=['North Region', 'South Region'], title='Regional Preferences for Visualization Libraries (Grouped)')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.show()

Voor gestapelde bargrafieken gebruik je stacked=True.
# Stacked Bar Plot
data.plot.bar(x='Library', y=['North Region', 'South Region'], stacked=True, title='Regional Preferences for Visualization Libraries (Stacked)')
plt.xlabel('Visualization Library')
plt.ylabel('Number of Enthusiasts')
plt.show()

Best practices voor het ontwerpen van effectieve Python-bargrafieken
Bargrafieken maken is eenvoudig, maar effectieve en inzichtelijke grafieken ontwerpen vraagt om aandacht voor detail. De volgende richtlijnen helpen je bargrafieken te maken die het verhaal van je data effectief overbrengen.
- Veelvoorkomende fouten vermijden: Vermijd overbelasting met informatie om je grafieken duidelijk en effectief te houden. Beperk je tot het essentiële om rommel te voorkomen. Gebruik consistente schalen op de assen. Zorg dat de as bij nul begint om kijkers niet te misleiden met overdreven verschillen.
- Kleuren en accenten kiezen: Kies kleuren die betekenis geven aan je data, zoals rood voor negatieve waarden of groen voor positieve. Houd een consistent kleurenschema aan over verwante grafieken, zodat de lezer de lijn kan volgen. Gebruik kleur om de aandacht op belangrijke inzichten te vestigen.
- Balken ordenen voor meer duidelijkheid: Orden balken logisch op basis van de context, bijvoorbeeld chronologisch voor tijdsdata of in af- of oplopende volgorde om trends te benadrukken. Groepeer verwante balken en gebruik kleur of ruimte om groepen te scheiden.
Conclusie
Het maken en aanpassen van bargrafieken beheersen is een essentiële vaardigheid voor iedere dataprofi. Door de richtlijnen en best practices in dit artikel te volgen, kun je duidelijke, informatieve en visueel aantrekkelijke bargrafieken maken die je data-inzichten effectief overbrengen. Zo presenteer je je data effectiever en neem je beter onderbouwde beslissingen.
Wil je je Python-datavisualisatievaardigheden blijven oefenen, bekijk dan onze cursus Intro to Python for Data Science, een startpunt voor beginners. Of bekijk onze Python Programming-skill track voor een compleet leerpad om Python te beheersen.
Ervaren dataprofessional en schrijver die graag ambitieuze experts in de dataruimte wil versterken.
Python-barplot: veelgestelde vragen
Wat is een Python-bargrafiek en waarom is die nuttig?
Een bargrafiek (bar plot) toont categorische data met rechthoekige balken, waarvan de lengte of hoogte overeenkomt met de waarde van de categorie. Het is handig om categorieën te vergelijken, verdelingen te visualiseren en trends of uitschieters te spotten.
Hoe kies ik tussen een verticale en horizontale Python-bargrafiek?
Gebruik een verticale bargrafiek bij korte of makkelijk leesbare labels, en kies een horizontale bargrafiek bij langere labels of veel categorieën om rommel te voorkomen.
Hoe pas ik de kleuren van de balken in mijn grafiek aan?
Je kunt de balkkleuren aanpassen om je grafiek aantrekkelijker te maken of te laten aansluiten bij een specifiek kleurenschema. In Matplotlib gebruik je de parameter color:
plt.bar(categories, values, color=['red', 'green', 'blue'])
plt.show()
Hoe kan ik in Python de balken in mijn bargrafiek sorteren?
Sorteren van de balken kan helpen om de belangrijkste of minst belangrijke categorieën te benadrukken. Je kunt je data voor het plotten sorteren:
data = {'Category': ['A', 'B', 'C'], 'Value': [4, 7, 1]}
df = pd.DataFrame(data).sort_values(by='Value', ascending=False)
plt.bar(df['Category'], df['Value'])
plt.show()Kan ik interactieve Python-bargrafieken maken met Plotly?
Ja, met Plotly kun je interactieve bargrafieken maken. Hier is een voorbeeld met Plotly Express:
import plotly.express as px
data = {'Category': ['A', 'B', 'C'], 'Value': [4, 7, 1]}
fig = px.bar(data, x='Category', y='Value', title='Interactive Bar Plot')
fig.show()
