Staafdiagram en histogram in R met voorbeeld
โก Slimme samenvatting
Staafdiagrammen en histogrammen in R worden gemaakt met ggplot2, waarbij geom_bar() wordt gebruikt voor categorische tellingen en geom_histogram() voor continue verdelingen. Deze handleiding beschrijft hoe je de kleur en groepering kunt aanpassen.ping, stapeling, oriรซntatie, binning en labels in de balken op de mtcars-dataset.

Wat is een staafdiagram in R?
Een staafdiagram is een uitstekende manier om categorische variabelen op de x-as weer te geven. Dit type grafiek geeft twee aspecten op de y-as aan.
- De eerste telt het aantal keren dat het element in elke groep voorkomt.
- De tweede grafiek toont een samenvattende statistiek (minimum, maximum, gemiddelde, enzovoort) van een variabele op de y-as.
Je gebruikt de mtcars-dataset, die de volgende variabelen bevat:
- cilinder: Nummer van de cilinder in de auto. Numerieke variabele
- am: Type transmissie. 0 voor automatisch en 1 voor handmatig. Numerieke variabele
- mpg: mijlen per gallon. Numerieke variabele
Omdat histogrammen er zo uniform uitzien, is het de moeite waard om de verschillen op te lossen voordat er code wordt geschreven.
Staafdiagram versus histogram in R: belangrijkste verschillen
De twee grafieken lijken op elkaar, maar worden voortdurend door elkaar gehaald. Ze beantwoorden verschillende vragen en gebruiken verschillende geometrische objecten.
| criteria | Bar Chart | histogram |
|---|---|---|
| X-as variabele | Categorisch of factorieel | Continue en numerieke |
| Wat een bar vertegenwoordigt | Eรฉn categorie | Een interval, ofwel een reeks waarden |
| Spleten tussen balken | Ja, de categorieรซn zijn gescheiden. | Nee, de afvalbakken staan โโnaast elkaar. |
| Barbestelling | Kan vrijelijk worden herschikt | Vastgelegd door de numerieke schaal |
| Vraag beantwoord | Hoe vergelijken de groepen zich met elkaar? | Hoe is een variabele verdeeld? |
| ggplot2-object | geom_bar() | geom_histogram() |
De vuistregel is: als het herschikken van de balken nog steeds zinvol is, heb je een staafdiagram. Als het herschikken ervan de betekenis tenietdoet, heb je een histogram. Voor kwartielgebaseerde samenvattingen van dezelfde continue variabele gebruik je een boxplot.
Hoe maak je een staafdiagram in R?
Om een โโgrafiek te maken in R, kunt u de bibliotheek ggplot gebruiken, die grafieken maakt die gereed zijn voor publicatie. De basissyntaxis van deze bibliotheek is:
ggplot(data, mapping = aes()) + geometric object arguments: data: dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common objects are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
Deze handleiding richt zich op het geometrische object geom_bar(), waarmee een staafdiagram wordt getekend, en op geom_histogram() voor continue data.
Staafdiagram: tellen
Je eerste grafiek toont de frequentie van cilinder met geom_bar(). De onderstaande code is de meest elementaire syntaxis.
library(ggplot2) # Most basic bar chart ggplot(mtcars, aes(x = factor(cyl))) + geom_bar()
Code Uitleg
- U geeft de dataset mtcars door aan ggplot.
- Binnen het argument aes() stel je de x-as in op de factorvariabele cyl.
- Het + teken betekent dat u wilt dat R de code blijft lezen. Het maakt de code leesbaarder door deze te breken.
- Gebruik geom_bar() voor het geometrische object.
Output:
Note: zorg ervoor dat u de variabelen omzet in een factor, anders behandelt R de variabelen als numeriek. Zie het onderstaande voorbeeld.
Pas de grafiek aan
Er kunnen vier argumenten worden doorgegeven om de grafiek aan te passen:
- `stat`: Controls what is plotted on the y-axis. By default `count`, which tallies rows. To plot a value you already computed, pass `stat = "identity"`
- `alpha`: Control density of the color
- `fill`: Change the color of the bar
- `size`: Control the size the bar
Verander de kleur van de balken
U kunt de kleur van de balken wijzigen. Merk op dat de kleuren van de balken allemaal hetzelfde zijn.
# Change the color of the bars ggplot(mtcars, aes(x = factor(cyl))) + geom_bar(fill = "coral") + theme_classic()
Code Uitleg
- De kleuren van de balken worden bepaald door de aes()-map.ping Binnen het geometrische object (dus niet in de ggplot()-functie). Je kunt de kleur wijzigen met de fill-argumenten. Hier kies je de koraalkleur.
Output:
U kunt deze code gebruiken:
grDevices::colors()
om alle kleuren te zien die beschikbaar zijn in R. Er zijn ongeveer 650 kleuren.
Verander de intensiteit
U kunt de intensiteit van de kleur van de balken verhogen of verlagen
# Change intensity ggplot(mtcars, aes(factor(cyl))) + geom_bar(fill = "coral", alpha = 0.5) + theme_classic()
Code Uitleg
- Om de intensiteit van de balk te verhogen/verlagen, kunt u de waarde van alpha wijzigen. Een hoge alpha-waarde verhoogt de intensiteit, terwijl een lage alpha-waarde de intensiteit verlaagt. Alpha varieert van 0 tot 1. Bij 1 komt de kleur exact overeen met het kleurenpalet; bij 0 is de balk onzichtbaar. Hier kiest u alpha = 0.5.
Output:
Kleur per groep
Je kunt de kleuren van de balken veranderen, wat betekent dat er voor elke groep een andere kleur is. De cil-variabele heeft bijvoorbeeld drie niveaus, waarna u het staafdiagram met drie kleuren kunt uitzetten.
# Color by group ggplot(mtcars, aes(factor(cyl), fill = factor(cyl))) + geom_bar()
Code Uitleg
- Het argument `fill` binnen de `aes()`-functie verandert de kleur van de balk. Je verandert de kleur door `fill = x-axis variable` in te stellen. In jouw voorbeeld is de x-axis variable `cyl`; `fill = factor(cyl)`
Output:
Voeg een groep toe in de balken
U kunt de y-as verder splitsen op basis van een ander factorniveau. U kunt bijvoorbeeld het aantal automatische en handmatige transmissies tellen op basis van het cilindertype.
U gaat als volgt te werk:
- Stap 1: Maak het dataframe met de mtcars-dataset
- Stap 2: Label de am-variabele met auto voor automatische transmissie en man voor handmatige transmissie. Converteer am en cyl als een factor, zodat u factor() niet hoeft te gebruiken in de ggplot()-functie.
- Stap 3: Teken het staafdiagram om het aantal transmissies per cilinder te tellen
library(dplyr) # Step 1 data <- mtcars %>% #Step 2 mutate(am = factor(am, labels = c("auto", "man")), cyl = factor(cyl))
Zodra de dataset gereed is, kunt u de grafiek tekenen:
# Stap 3
ggplot(data, aes(x = cyl, fill = am)) + geom_bar() + theme_classic()
Code Uitleg
- De ggplot()-aanroep ontvangt de datasetgegevens en de aes()-kaart.ping.
- In de aes() neem je de variabele x-as op en welke variabele nodig is om de balk te vullen (dat wil zeggen am)
- geom_bar(): Maak het staafdiagram
Output:
De kaartping De balk wordt gevuld met twee kleuren, รฉรฉn voor elk niveau. Het is eenvoudig om de groep te wijzigen door andere factorvariabelen in de dataset te selecteren.
Staafdiagram in procenten
U kunt de balk in percentage visualiseren in plaats van in de ruwe telling.
# Staafdiagram in percentage
ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = "fill") + theme_classic()
Code Uitleg
- Gebruik position = โfillโ in het geom_bar() argument om een โโafbeelding te maken met een percentage op de y-as.
Output:
Staven naast elkaar
Het is gemakkelijk om het staafdiagram uit te zetten met de groepsvariabele naast elkaar.
# Bar chart side by side ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = position_dodge()) + theme_classic()
Code Uitleg
- position=position_dodge(): Geeft expliciet aan hoe de balken moeten worden gerangschikt
Output:
Staafdiagram met een samenvattende statistiek
In het tweede deel van de handleiding wordt op de y-as een berekende waarde weergegeven in plaats van een telling. Merk op dat dit nog steeds een staafdiagram is: een echt histogram wordt verderop behandeld en maakt gebruik van een ander geometrisch object.
Je doel is om een โโgrafiek te maken met de gemiddelde mijl per gallon voor elk type cilinder. Om een โโinformatieve grafiek te tekenen, volgt u deze stappen:
- Stap 1: Maak een nieuwe variabele met de gemiddelde mijl per gallon per cilinder
- Stap 2: Maak een basishistogram
- Stap 3: Verander de richting
- Stap 4: Verander de kleur
- Stap 5: Wijzig de maat
- Stap 6: Voeg labels toe aan de grafiek
Stap 1) Een nieuwe variabele maken
U maakt een dataframe met de naam data_histogram, dat eenvoudigweg de gemiddelde mijlen per gallon retourneert op basis van het aantal cilinders in de auto. Je noemt deze nieuwe variabele mean_mpg, en je rondt het gemiddelde af met twee decimalen.
# Stap 1
data_histogram <- mtcars %>% mutate(cyl = factor(cyl)) %>% group_by(cyl) %>% summarize(mean_mpg = round(mean(mpg), 2))
Stap 2) Maak een basishistogram
Je kunt het histogram plotten. Het is nog niet verfijnd genoeg om aan een klant te overhandigen, maar het laat de trend al wel zien.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity")
Code Uitleg
- De aes() heeft nu twee variabelen. De cil-variabele verwijst naar de x-as en de mean_mpg is de y-as.
- Je geeft `stat = โidentityโ` door, zodat `geom_bar()` de y-asvariabele gebruikt zoals die is, in plaats van rijen te tellen. De standaardwaarde voor `geom_bar()` is `stat = โcountโ`.
Output:
Stap 3) Verander de richting
U wijzigt de richting van de grafiek van verticaal naar horizontaal.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity") + coord_flip()
Code Uitleg
- Je kunt de oriรซntatie van de grafiek bepalen met coord_flip().
Output:
Stap 4) Verander de kleur
U kunt de kleuren van de staven differentiรซren op basis van het factorniveau van de variabele op de x-as.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity") + coord_flip() + theme_classic()
Code Uitleg
- Je kunt de grafiek per groep plotten met de fill=cyl map.pingR zorgt automatisch voor de kleuren op basis van de waarden van de variabele cyl.
Output:
Stap 5) Verander de maat
Om de grafiek er mooier uit te laten zien, verkleint u de breedte van de balk.
graph <- ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity", width = 0.5) + coord_flip() + theme_classic()
Code Uitleg
- Het argument `width` in de functie `geom_bar()` bepaalt de dikte van de balk. Een grotere waarde maakt de balk breder.
- De grafiek wordt opgeslagen in de objectgrafiek, omdat deze in de volgende stap ongewijzigd opnieuw wordt gebruikt. Het opslaan van tussentijdse grafieken zorgt ervoor dat de code leesbaar blijft.
Output:
Stap 6) Voeg labels toe aan de grafiek
De laatste stap voegt de waarde van mean_mpg toe als label in elke balk.
graph +
geom_text(aes(label = mean_mpg),
hjust = 1.5,
color = "white",
size = 3) +
theme_classic()
Code Uitleg
- De functie geom_text() is handig om de esthetiek van de tekst te bepalen.
- label=: Voeg een label toe binnen de balken
- mean_mpg: Gebruik de variabele mean_mpg voor het label
- hjust bepaalt de positie van het label op de balk. Waarden dicht bij 1 plaatsen het label aan het uiteinde van de balk, terwijl grotere waarden het label dichter naar de as duwen. Als de grafiek verticaal is, wijzig dan hjust in vjust.
- color=โwhiteโ: Verander de kleur van de tekst. Hier gebruik je de witte kleur.
- size=3: Stel de grootte van de tekst in.
Output:
Hoe je balken in een staafdiagram in R kunt ordenen en labelen.
Twee laatste details onderscheiden een conceptgrafiek van een grafiek die klaar is voor publicatie: het sorteren van de balken op waarde en het correct labelen van de assen.
Het herschikken van de staven. ggplot2 rangschikt factorniveaus standaard alfabetisch, wat zelden de meest informatieve volgorde is. Plaats de variabele x in reorder() om te sorteren op een tweede variabele:
# Sort the bars from lowest to highest mean_mpg ggplot(data_histogram, aes(x = reorder(cyl, mean_mpg), y = mean_mpg)) + geom_bar(stat = "identity", fill = "coral") + theme_classic()
Voorzie de sorteervariabele van een minteken, bijvoorbeeld reorder(cyl, -mean_mpg), om de sorteerrichting om te keren.
Titels en aslabels toevoegen. De functie labs() stelt elk tekstelement in รฉรฉn keer in:
ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity") + labs(title = "Average fuel economy by cylinder count", subtitle = "mtcars dataset", x = "Number of cylinders", y = "Mean miles per gallon", fill = "Cylinders", caption = "Source: mtcars") + theme_classic()
Stel fill = NULL in labs() in om de legendatitel volledig te verwijderen, en gebruik theme(legend.position = โnoneโ) om de legenda te verwijderen wanneer de x-as de groepen al benoemt.
Je eigen kleuren kiezen. Vervang het standaard kleurenpalet door een specifiek palet, zodat de kleurenkaart aansluit bij de stijl van uw huis:
scale_fill_manual(values = c("4" = "#0e9cd1", "6" = "coral", "8" = "grey40"))
Hoe maak je een histogram in R met geom_histogram()?
Een histogram laat zien hoe een enkele continue variabele verdeeld is. In plaats van categorieรซn te tellen, verdeelt ggplot2 het numerieke bereik in intervallen en telt hoeveel waarnemingen in elk interval vallen.
library(ggplot2) # Most basic histogram ggplot(mtcars, aes(x = mpg)) + geom_histogram()
R geeft een bericht weer waarin wordt aanbevolen een beter aantal bins te kiezen, omdat de standaardwaarde van 30 bins willekeurig is. Twee argumenten bepalen dit:
- bins: het aantal intervallen waarin het bereik moet worden verdeeld.
- binbreedte: de breedte van elk interval, uitgedrukt in de eenheden van de variabele. Gebruik deze optie wanneer de eenheden betekenisvol zijn.
# Set the number of bins ggplot(mtcars, aes(x = mpg)) + geom_histogram(bins = 10, fill = "coral", color = "white") + theme_classic() # Or set the width of each bin instead ggplot(mtcars, aes(x = mpg)) + geom_histogram(binwidth = 4, fill = "coral", color = "white") + theme_classic()
Het aantal bins is de allerbelangrijkste keuze bij het maken van een histogram. Te weinig bins verbergen echte structuren, zoals een tweede piek; te veel bins maken de grafiek ruis. Probeer verschillende waarden uit voordat u er een kiest.
Groepen vergelijken. Wijs een factor toe om de positie in te vullen en zo de verdelingen leesbaar te houden:
ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + geom_histogram(bins = 10, position = "identity", alpha = 0.5) + theme_classic()
Met position = โidentityโ en een verlaagde alfawaarde overlappen de histogrammen elkaar, zodat je de vormen direct kunt vergelijken. Gebruik position = โdodgeโ als je de bins liever naast elkaar wilt zien.
Dichtheid in plaats van aantallen. Als de groepen verschillen in grootte, plot dan de dichtheid zodat de oppervlakten vergelijkbaar zijn en leg er een afgevlakte curve overheen:
ggplot(mtcars, aes(x = mpg)) + geom_histogram(aes(y = after_stat(density)), bins = 10, fill = "coral", alpha = 0.6) + geom_density(color = "steelblue", linewidth = 1) + theme_classic()
Staafdiagram en histogram in R: Code Referentie
Een staafdiagram is geschikt voor een categorische x-as, waarbij de y-as een telling of een samenvattende statistiek weergeeft. De onderstaande tabel toont de ggplot2-aanroep voor elke hierboven besproken variant:
| Objectief | Code |
|---|---|
| Tellen |
ggplot(df, aes(x = factor(x1))) + geom_bar() |
| Tel met verschillende vulkleuren |
ggplot(df, aes(x = factor(x1), fill = factor(x1))) + geom_bar() |
| Tel met groepen, gestapeld |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar() |
| Tel met groepen, naast elkaar |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = position_dodge()) |
| Tellen met groepen, gestapeld in % |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = "fill") |
| Waarden (samenvattende statistiek) |
ggplot(df, aes(x = factor(x1), y = x2)) + geom_bar(stat = "identity") |
| Histogram van een continue variabele |
ggplot(df, aes(x = x1)) + geom_histogram(bins = 30) |













