Ga naar hoofdinhoud

ggplot2-histogram in R: Complete tutorial met voorbeelden

Leer ggplot2-histogrammen in R maken en aanpassen, van basisplots tot gekleurde, gefacetteerde en met dichtheidsoverlays.
Bijgewerkt 2 okt 2026  · 7 min lezen

Verken met AI

ChatGPTClaudePerplexity

Histogrammen laten in één oogopslag de vorm van de verdeling van een dataset zien. In deze tutorial laat ik je stap voor stap zien hoe je histogrammen maakt en aanpast met ggplot2, R’s meest gebruikte visualisatiebibliotheek en een kernonderdeel van het tidyverse-ecosysteem. ggplot2 volgt een grammar of graphics waarmee je complexe visualisaties opbouwt door laagelementen te stapelen. Voor een base R-aanpak, zie onze histogram-tutorial met base R.

TL;DR

  • Gebruik geom_histogram() binnen een ggplot()-aanroep om een histogram te tekenen

  • Stuur het aantal bins aan met bins of de bin-grootte met binwidth binnen geom_histogram()

  • Pas balkkleuren aan met de argumenten color (omtrek) en fill (vulling)

  • Leg een dichtheidskromme erbovenop met geom_density() nadat je y = after_stat(density) hebt ingesteld

  • Splits op categorie met fill = variable in aes() of gebruik facet_grid() voor afzonderlijke panelen

Wat is een histogram?

Histogrammen zijn visualisaties die frequentieverdelingen over continue (numerieke) variabelen tonen. Zo zie je hoeveel waarnemingen binnen de bereiken vallen die de continue variabele beslaat.

Aan de slag met ggplot2

Om deze tutorial te volgen heb je R nodig en de volgende packages: ggplot2, readr en dplyr. De code in de volgende sectie installeert ze als je dat nog niet hebt gedaan.

Packages installeren

We moeten eerst de ggplot2-bibliotheek importeren met de functie library. Hiermee krijg je toegang tot alle ingebouwde functies van ggplot2. Als je ggplot2 nog niet hebt geïnstalleerd, doe dat dan met install.packages(). Hetzelfde doen we voor de readr-bibliotheek, om een CSV-bestand in te lezen, en dplyr, waarmee we makkelijker met de ingelezen data kunnen werken. 

install.packages("ggplot2")
install.packages("readr")
install.packages("dplyr")
library(ggplot2)
library(readr)
library(dplyr)

De dataset laden

Voor deze tutorial gebruiken we deze woningendataset, met details over verschillende woningaanbiedingen, waaronder de grootte van het huis, het aantal kamers, de prijs en locatie-informatie. 

We kunnen de data inlezen met de functie read_csv(). Dat kan rechtstreeks vanaf de URL, of je downloadt het CSV-bestand en leest het lokaal in. Het eerste attribuut van read_csv() is de locatie van de data, en met het attribuut col_select kies je de kolommen die ons interesseren. 

home_data <- read_csv(
    "https://raw.githubusercontent.com/rashida048/Datasets/master/home_data.csv",
    col_select = c(price, condition)
)

Daarna kunnen we met de functie head() de eerste paar rijen bekijken:

head(home_data)

Eerste rijen van de woningendataset met de kolommen price en condition

Hoe maak je een histogram met ggplot2

Nu kunnen we het histogram maken. Ongeacht het type grafiek dat we in ggplot2 maken, we beginnen altijd met de functie ggplot(), die een canvas maakt om laagelementen aan toe te voegen. Deze functie neemt twee parameters.

  • Het eerste argument is een data frame. Hier willen we home_data gebruiken.

  • Het tweede argument is een mapping van kolommen in het data frame naar plotesthetiek. Deze mapping moet de functie aes() aanroepen. Hier mappen we de kolom price op de x-as.

Tot nu toe is onze code

ggplot(data = home_data, aes(x = price))

Dit tekent op zichzelf niets bruikbaars. Om er een histogram van te maken voegen we de histogram-geometrie toe met geom_histogram().

ggplot(data = home_data, aes(x = price)) +
  geom_histogram()

Basis-ggplot2-histogram van woningprijzen

Voeg beschrijvende statistieken toe aan een histogram met geom_vline()

We kunnen beschrijvende statistieken aan onze plot toevoegen met de functie geom_vline(). Dit voegt een verticale lijn-geometrie toe aan de plot.

Eerst berekenen we een beschrijvende statistiek, in dit geval de gemiddelde prijs, met dplyr’s summarize().

price_stats <- home_data |>
summarize(mean_price = mean(price))
price_stats
# A tibble: 1 × 1
  mean_price
      <dbl>
1    540088.

De functie neemt de parameter xintercept, en optionele color- en linewidth-attributen om respectievelijk de kleur en de dikte van de lijnen aan te passen. We voegen een gemiddelde-lijn toe met het plusteken, zoals in de vorige sectie.

ggplot(home_data, aes(x = price)) +
    geom_histogram() +
    geom_vline(aes(xintercept = mean_price), price_stats, color = "red", linewidth = 2)

Let op dat in geom_-functies de mapping- en data-argumenten omgewisseld zijn vergeleken met ggplot().

ggplot2-histogram met een rode verticale gemiddelde-prijslijn toegevoegd via geom_vline()

Waarschijnlijkheidsdichtheden plotten in plaats van tellingen

Om een dichtheidslijn aan het histogram toe te voegen, schalen we eerst de y-as naar dichtheid. In de functie aes() zetten we y op after_stat(density). 

Vervolgens kunnen we een density-laag toevoegen met de functie geom_density(). Hier stellen we het attribuut color in op groen en linewidth op 2.

ggplot(home_data, aes(x = price, y = after_stat(density))) +
    geom_histogram() +
    geom_vline(aes(xintercept = mean_price), price_stats, color = "red", linewidth = 2) +
    geom_density(color = "green", linewidth = 2)

image4.png

Let op dat de getallen op de y-as zijn veranderd.

Merk ook op dat elke laag hetzelfde patroon volgt: een +-teken, een functieaanroep en optionele argumenten. Je kunt geom_-functies, statistieken en thema’s toevoegen zonder voor elke combinatie de syntax opnieuw te leren.

Update van binning met bins

We kunnen de binning van ons ggplot2-histogram aanpassen met het attribuut bins. We zetten dit gelijk aan het aantal bins dat we in de grafiek willen tonen. Dit helpt om grovere of juist fijnere details in ons histogram te zien. 

ggplot(data = home_data, aes(x = price)) +
  geom_histogram(bins = 100)

image12.png

We kunnen de binbreedte ook handmatig instellen met het attribuut binwidth van geom_histogram().

ggplot(data = home_data, aes(x = price)) +
  geom_histogram(binwidth = 50000)

image5.png

Tot slot kun je de grenzen uitlijnen met de attributen center of boundary. Als je wilt dat de grenzen van bins op specifieke veelvouden vallen, kun je deze attributen gebruiken (er kan maar één tegelijk worden gebruikt). Om ervoor te zorgen dat bins op gehele waarden eindigen, zet je het attribuut gelijk aan 1.   

ggplot(data = home_data, aes(x = price)) +
  geom_histogram(boundary = 1)

ggplot2-histogram met bin-grenzen uitgelijnd via het boundary-argument

De kleur van het histogram aanpassen

In deze sectie veranderen we de kleuren van het histogram. We kunnen de kleur van de omtrek van elke balk aanpassen met het attribuut color, en de vulling van de balken met het attribuut fill van geom_histogram(). We vullen de balken met blauw en zetten de omlijningskleur op wit. 

ggplot(data = home_data, aes(x = price)) +
  geom_histogram(color = "white", fill = "blue")

ggplot2-histogram met witte balkomtrekken en blauwe vulling

De kleur van het ggplot2-histogram op basis van groepen aanpassen

Je kunt de kleuren van de histogram-balken aanpassen. 

Het veranderen van de fill-esthetiek (binnen de functie aes()) verandert de binnenkleuren van de balken op basis van de waarde van een variabele in de dataset. Die variabele moet categorisch zijn (een factor) in plaats van gehele getallen, dus we kunnen die converteren met de functie factor(). In dit voorbeeld bekijken we de variabele condition, een waarde van 1 (slechte staat) tot 5 (uitstekende staat). 

home_data <- home_data |>
    mutate(condition = factor(condition))

ggplot(data = home_data, aes(x = price, fill = condition)) +
    geom_histogram()

ggplot2-histogram met balken gekleurd per woningconditie-categorie

Labels en titels toevoegen met labs()

Vervolgens voegen we titels en labels toe aan onze grafiek met de functie labs(). We zetten de attributen x, y en title op onze gewenste labels. 

ggplot(data = home_data, aes(x = price)) +
  geom_histogram() +
  labs(x ='Prijs (USD)', y='Aantal aanbiedingen', title = 'Verdelingen van woningprijzen')

ggplot2-histogram met aangepaste x-as-, y-as- en titel-labels

x-as-limieten instellen met xlim()

We kunnen de limieten van de x-as instellen met de functie xlim()  om in te zoomen op de data die ons interesseren. Soms is het bijvoorbeeld handig om te focussen op het centrale deel van de verdeling in plaats van op de lange staart die we nu zien als we de hele plot bekijken. 

De limieten van de y-as aanpassen kan ook (met ylim()), maar dat is bij histogrammen minder nuttig omdat de automatisch berekende waarden bijna altijd ideaal zijn.

We zoomen in op prijzen tussen $0 en $2M.

ggplot(home_data, aes(x = price)) +
    geom_histogram(bins = 100) +
    xlim(0, 2000000)

ggplot2-histogram ingezoomd op prijzen tussen $0 en $2M met xlim()

Positie van de legenda wijzigen

Als we de legenda in onze grafiek willen verplaatsen, bijvoorbeeld wanneer we de conditie in verschillende kleuren visualiseren, kunnen we de functie theme() en het attribuut legend.position gebruiken. Toegestane waarden voor legend.position zijn “bottom”, “top”, “left” of “right”. Je kunt ook coördinaten doorgeven met c(x, y) voor een specifieke positie.

ggplot(home_data, aes(x = price, fill = condition)) +
    geom_histogram() +
    theme(legend.position = "bottom")

Facetten gebruiken in ggplot2

Tot slot kunnen we data per groep in afzonderlijke grafieken visualiseren met facetten. Dit splitst de visualisatie in meerdere subplotten, één per categorie. Dit doe je met de functie facet_grid(). Hieronder visualiseren we de prijsverdelingen per conditiewaarde. 

ggplot(home_data, aes(x = price)) +
  geom_histogram() +  facet_grid(vars(condition))

Facetteren wordt uitgebreider behandeld in de tutorial Facets for ggplot in R.

image2.png

Tot slot

Om een histogram in ggplot2 te maken, bouw je de basis met ggplot(), geef je je data frame en aes()-mapping door, en voeg je geom_histogram() toe. Vanaf daar kun je laag voor laag aanpassen: labs() voor as-titels, xlim() om de x-as in te zoomen, en theme() om de legenda te verplaatsen of de stijl te wijzigen.

ggplot2 komt uitgebreid aan bod in het skill track Data Visualization in R, te beginnen met Introduction to Data Visualization with ggplot2. Je leert ggplot2 combineren met andere tidyverse-tools in het skill track Tidyverse Fundamentals with R.

Voor meer ggplot2-plottypes naast histogrammen, zie onze Graphics with ggplot2-tutorial, en download een kopie van de ggplot2-cheat sheet als handig naslagwerk.


Author
Kevin Babitz
LinkedIn

Data Science-schrijver | Senior Technical Marketing Analyst bij Wayfair | MSE in Data Science aan de University of Pennsylvania

Onderwerpen
R
Data Science
Datavisualisatie

Leer R met DataCamp!

Cursus

Introductie tot datavisualisatie met ggplot2

4 uur
191.2K
Leer hoe je met ggplot2 betekenisvolle en mooie datavisualisaties maakt door de grammatica van graphics te begrijpen.
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