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.

  • ๐Ÿ“Š Kernonderscheid: Een staafdiagram vat een categorische variabele samen, terwijl een histogram een โ€‹โ€‹enkele continue variabele in intervallen indeelt.
  • ๐Ÿงฑ Grammatica van grafische vormgeving: Elke plot combineert een dataset en een aes()-kaart.pingen een geometrisch object verbonden met het plusteken.
  • ???? Kleurcontrole: Plaats de vulling in geom_bar() voor รฉรฉn uniforme kleur en in aes() om balken per groep te kleuren.
  • ๐Ÿ“ Positieaanpassingen: position = โ€œfillโ€ zet tellingen om in percentages en position_dodge() plaatst gegroepeerde balken naast elkaar.
  • ๐Ÿ”ข Waarden plotten: Geef stat = โ€œidentityโ€ door wanneer de y-as al een berekende statistiek bevat, zoals een groepsgemiddelde.
  • ๐Ÿ“ Histogramindeling: Stel het aantal bins of de binbreedte in geom_histogram() in, omdat de standaardwaarde van 30 bins zelden geschikt is voor de data.

Staafdiagramhistogram in R

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.

  1. De eerste telt het aantal keren dat het element in elke groep voorkomt.
  2. 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:

Staafdiagram: tellen

Note: zorg ervoor dat u de variabelen omzet in een factor, anders behandelt R de variabelen als numeriek. Zie het onderstaande voorbeeld.

Staafdiagram: tellen

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:

Verander de kleur van de balken

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:

Verander de intensiteit

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:

Kleur per groep

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:

Voeg een groep toe in de balken

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:

Staafdiagram in procenten

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:

Staven naast elkaar

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:

histogram

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:

histogram

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:

histogram

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:

histogram

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:

histogram

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)

Veelgestelde vragen

Gebruik een histogram wanneer de variabele op de x-as continu is en u de verdeling ervan wilt bekijken. Gebruik een staafdiagram wanneer de x-as afzonderlijke categorieรซn bevat en u deze wilt vergelijken.

Binnen aes() wordt fill toegewezen aan een kleur, waardoor elke groep zijn eigen tint krijgt. Buiten aes(), binnen geom_bar(), is fill een vaste waarde die op elke balk wordt toegepast.

Er is geen universeel antwoord. Begin met de wortel van het aantal waarnemingen en pas dit vervolgens aan. Te weinig bins verbergen structuren zoals een tweede piek, terwijl te veel bins een ruisige, grillige grafiek opleveren.

Histogrammen zijn de standaard eerste stap in verkennende data-analyse voor AI-projecten. Ze onthullen scheefheid, uitschieters en klasse-onbalans voordat er een model wordt getraind. Staafdiagrammen geven vervolgens een samenvatting van het belang van kenmerken en de frequentie van categorieรซn.

Ja. AI-assistenten kunnen ggplot2-lagen genereren op basis van een eenvoudige beschrijving van de grafiek en fouten zoals een ontbrekend stat-argument verklaren. Voer de gegenereerde code altijd uit op uw eigen gegevens om de kaart te controleren.ping is juist.

Vat dit bericht samen met: