Staafdiagram en histogram in R (met voorbeeld)
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 gebeurtenissen tussen groepen.
- De tweede toont een samenvattende statistiek (min, max, gemiddelde, enzovoort) van een variabele op de y-as.
U gebruikt de mtcars-dataset met de volgende variabelen:
- 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
Hoe u een staafdiagram maakt
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()`
In deze zelfstudie bent u geïnteresseerd in het geometrische object geom_bar() waarmee het staafdiagram wordt gemaakt.
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 aes()-argument voeg je de x-as toe als een 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`: Control the type of formatting. By default, `bin` to plot a count in the y-axis. For continuous value, 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()-toewijzing binnen het geometrische object (dwz niet in de ggplot()). U kunt de kleur wijzigen met de vulargumenten. 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 de alfa wijzigen. Een grote alfa verhoogt de intensiteit, en een lage alfa vermindert de intensiteit. alfa varieert van 0 tot 1. Indien 1, dan is de kleur hetzelfde als het palet. Indien 0, is de kleur wit. U kiest alfa = 0.1.
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() maakt het mogelijk de kleur van de balk te veranderen. U wijzigt de kleur door de variabele fill = x-as in te stellen. In uw voorbeeld is de variabele op de x-as cil; vullen = factor(cil)
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))
Je hebt de dataset klaar, je kunt de grafiek plotten;
# Stap 3
ggplot(data, aes(x = cyl, fill = am)) +
geom_bar() +
theme_classic()
Code Uitleg
- De ggpplot() bevat de gegevenssetgegevens en de aes().
- 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 mapping vult de balk met twee kleuren, één voor elk niveau. Het is moeiteloos om de groep te veranderen door andere factorvariabelen in de dataset te kiezen.
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:
histogram
In het tweede deel van de zelfstudie over staafdiagrammen kunt u de groep variabelen weergeven met waarden op de y-as.
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
U kunt het histogram plotten. Het is niet klaar om te communiceren om aan de klant te worden afgeleverd, maar geeft ons een intuïtie over de trend.
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.
- U moet het argument stat=”identity” doorgeven om de variabele op de y-as als een numerieke waarde te verwijzen. geom_bar gebruikt stat=”bin” als standaardwaarde.
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
- U kunt de grafiek per groep uitzetten met de fill= cyl-toewijzing. R zorgt automatisch voor de kleuren op basis van de niveaus van de cil-variabele
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 breedteargument binnen de geom_bar() bepaalt de grootte van de balk. Een grotere waarde vergroot de breedte.
- Let op, u slaat de grafiek op in de variabele grafiek. U doet dit omdat de volgende stap de code van de variabele grafiek niet verandert. Het verbetert de leesbaarheid van de code.
Output:
Stap 6) Voeg labels toe aan de grafiek
De laatste stap bestaat uit het toevoegen van de waarde van de variabele mean_mpg aan het label.
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 locatie van het label. Waarden gesloten op 1 geven het label bovenaan de balk weer, en hogere waarden brengen het label naar de onderkant. Als de oriëntatie van de grafiek verticaal is, verander 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:
Samenvatting
Een staafdiagram is handig wanneer de x-as een categorische variabele is. De y-as kan een telling of een samenvattende statistiek zijn. De onderstaande tabel vat samen hoe u een staafdiagram met ggplot2 kunt besturen:
| Objectief | Code |
|---|---|
| Tellen |
ggplot(df, eas(x= factor(x1)) + geom_bar() |
| Tel met verschillende vulkleuren |
ggplot(df, eas(x= factor(x1), fill = factor(x1))) + geom_bar() |
| Tel met groepen, gestapeld |
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar(position=position_dodge()) |
| Tel met groepen, naast elkaar |
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar() |
| Tellen met groepen, gestapeld in % |
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar(position=position_dodge()) |
| Waarden |
ggplot(df, eas(x= factor(x1)+ y = x2) + geom_bar(stat="identity") |













