Søjlediagram og histogram i R med eksempel
⚡ Smart opsummering
Søjlediagrammer og histogrammer i R er bygget med ggplot2, hvor geom_bar() bruges til kategoriske optællinger og geom_histogram() til kontinuerlige fordelinger. Denne gennemgang tilpasser farve, grupperingping, stabling, orientering, binning og in-bar-etiketter på mtcars-datasættet.

Hvad er et søjlediagram i R?
Et søjlediagram er en fantastisk måde at vise kategoriske variable på x-aksen. Denne type graf angiver to aspekter i y-aksen.
- Den første tæller antallet af forekomster i hver gruppe.
- Den anden viser en opsummerende statistik (minimum, maksimum, gennemsnit osv.) for en variabel på y-aksen.
Du skal bruge mtcars-datasættet, som har følgende variabler:
- cyl: nummer på cylinderen i bilen. Numerisk variabel
- am: Type transmission. 0 for automatisk og 1 for manuel. Numerisk variabel
- mpg: Miles per gallon. Numerisk variabel
Fordi et histogram ligner hinanden så meget, er det værd at udligne forskellen, før man skriver kode.
Søjlediagram vs. histogram i R: Vigtigste forskelle
De to diagrammer ligner hinanden, og de bliver konstant forvekslet. De besvarer forskellige spørgsmål og bruger forskellige geometriske objekter.
| Kriterier | Bar Chart | Histogram |
|---|---|---|
| X-akse variabel | Kategorisk eller faktor | Kontinuerlig og numerisk |
| Hvad en bjælke repræsenterer | Én kategori | Et interval, eller en bin, af værdier |
| Mellemrum mellem stænger | Ja, kategorierne er separate | Nej, skraldespandene står ved siden af |
| Barordre | Kan omarrangeres frit | Fastgjort af den numeriske skala |
| Spørgsmål besvaret | Hvordan kan grupper sammenlignes? | Hvordan er én variabel fordelt? |
| ggplot2-objekt | geom_bar() | geom_histogram() |
Tommelfingerreglen: Hvis det stadig giver mening at ændre rækkefølgen af søjlerne, har du et søjlediagram. Hvis det ville ødelægge meningen at ændre rækkefølgen, har du et histogram. For kvartilbaserede opsummeringer af den samme kontinuerlige variabel skal du bruge et kasse plot.
Sådan opretter du et søjlediagram i R
For at lave graf i R, kan du bruge biblioteket ggplot, som opretter grafer, der er klar til udgivelse. Den grundlæggende syntaks for dette bibliotek er:
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()`
Denne vejledning fokuserer på det geometriske objekt geom_bar(), som tegner søjlediagrammet, og på geom_histogram() for kontinuerlige data.
Søjlediagram: antal
Din første graf viser frekvensen af cylinder med geom_bar(). Koden nedenfor er den mest grundlæggende syntaks.
library(ggplot2) # Most basic bar chart ggplot(mtcars, aes(x = factor(cyl))) + geom_bar()
Code Forklaring
- Du videregiver datasættet mtcars til ggplot.
- Inde i argumentet aes() sætter du x-aksen til faktorvariablen cyl
- + tegnet betyder, at du vil have R til at blive ved med at læse koden. Det gør koden mere læsbar ved at bryde den.
- Brug geom_bar() til det geometriske objekt.
Output:
Bemærk: sørg for at konvertere variablerne til en faktor ellers behandler R variablerne som numeriske. Se eksemplet nedenfor.
Tilpas grafen
Fire argumenter kan overføres for at tilpasse grafen:
- `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
Skift farven på søjlerne
Du kan ændre farven på søjlerne. Bemærk, at farverne på søjlerne alle er ens.
# Change the color of the bars ggplot(mtcars, aes(x = factor(cyl))) + geom_bar(fill = "coral") + theme_classic()
Code Forklaring
- Farverne på bjælkerne styres af aes()-kortetping inde i det geometriske objekt (dvs. ikke i ggplot()). Du kan ændre farven med fyld-argumenterne. Her vælger du koralfarven.
Output:
Du kan bruge denne kode:
grDevices::colors()
for at se alle de tilgængelige farver i R. Der er omkring 650 farver.
Skift intensiteten
Du kan øge eller mindske intensiteten af søjlernes farve
# Change intensity ggplot(mtcars, aes(factor(cyl))) + geom_bar(fill = "coral", alpha = 0.5) + theme_classic()
Code Forklaring
- For at øge/mindske søjlens intensitet kan du ændre værdien af alfa. En stor alfa øger intensiteten, og lav alfa reducerer intensiteten. Alfa går fra 0 til 1. Ved 1 matcher farven paletten præcist; ved 0 er søjlen usynlig. Her vælger du alfa = 0.5.
Output:
Farve efter grupper
Du kan ændre farverne på søjlerne, hvilket betyder en forskellig farve for hver gruppe. For eksempel har cyl variabel tre niveauer, så kan du plotte søjlediagrammet med tre farver.
# Color by group ggplot(mtcars, aes(factor(cyl), fill = factor(cyl))) + geom_bar()
Code Forklaring
- Argumentet `fill` i `aes()` ændrer farven på bjælken. Du ændrer farven ved at sætte `fill` = `x-axis variable`. I dit eksempel er `x-axis variable` cyl; `fill` = `factor(cyl`)
Output:
Tilføj en gruppe i søjlerne
Du kan yderligere opdele y-aksen baseret på et andet faktorniveau. For eksempel kan du tælle antallet af automatiske og manuelle gear baseret på cylindertypen.
Du vil fortsætte som følger:
- Trin 1: Opret datarammen med mtcars datasæt
- Trin 2: Mærk am variabelen med auto til automatgear og man for manuel gearkasse. Konverter am og cyl som en faktor, så du ikke behøver at bruge factor() i ggplot()-funktionen.
- Trin 3: Plot søjlediagrammet for at tælle antallet af transmissioner pr. cylinder
library(dplyr) # Step 1 data <- mtcars %>% #Step 2 mutate(am = factor(am, labels = c("auto", "man")), cyl = factor(cyl))
Når datasættet er klar, kan du plotte grafen:
# Trin 3
ggplot(data, aes(x = cyl, fill = am)) + geom_bar() + theme_classic()
Code Forklaring
- ggplot()-kaldet modtager datasættets data og aes()-kortetping.
- I aes() inkluderer du variablen x-akse og hvilken variabel der kræves for at udfylde bjælken (dvs. am)
- geom_bar(): Opret søjlediagrammet
Output:
Kortetping vil fylde bjælken med to farver, én for hvert niveau. Det er nemt at ændre gruppen ved at vælge andre faktorvariabler i datasættet.
Søjlediagram i procent
Du kan visualisere bjælken i procent i stedet for det rå antal.
# Søjlediagram i procent
ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = "fill") + theme_classic()
Code Forklaring
- Brug position = "fill" i geom_bar()-argumentet for at skabe en grafik med procent i y-aksen.
Output:
Side om side stænger
Det er nemt at plotte søjlediagrammet med gruppevariablen side om side.
# Bar chart side by side ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = position_dodge()) + theme_classic()
Code Forklaring
- position=position_dodge(): Fortæller eksplicit, hvordan søjlerne skal arrangeres
Output:
Søjlediagram med en opsummerende statistik
I anden del af vejledningen viser y-aksen en beregnet værdi i stedet for et antal. Bemærk, at dette stadig er et søjlediagram: et ægte histogram er beskrevet længere nede, og det bruger et andet geometrisk objekt.
Dit mål er at lave en graf med den gennemsnitlige mile pr. gallon for hver type cylinder. For at tegne en informativ graf skal du følge disse trin:
- Trin 1: Opret en ny variabel med den gennemsnitlige mile pr. gallon pr. cylinder
- Trin 2: Opret et grundlæggende histogram
- Trin 3: Skift retningen
- Trin 4: Skift farve
- Trin 5: Skift størrelse
- Trin 6: Tilføj etiketter til grafen
Trin 1) Opret en ny variabel
Du opretter en dataramme ved navn data_histogram, som blot returnerer de gennemsnitlige miles per gallon efter antallet af cylindre i bilen. Du kalder denne nye variabel mean_mpg, og du afrunder middelværdien med to decimaler.
# Trin 1
data_histogram <- mtcars %>% mutate(cyl = factor(cyl)) %>% group_by(cyl) %>% summarize(mean_mpg = round(mean(mpg), 2))
Trin 2) Lav et grundlæggende histogram
Du kan plotte histogrammet. Det er endnu ikke poleret nok til at give det til en klient, men det viser allerede tendensen.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity")
Code Forklaring
- aes() har nu to variable. Cyl-variablen refererer til x-aksen, og middel_mpg er y-aksen.
- Du bruger stat = “identity”, så geom_bar() bruger y-aksevariablen, som den er, i stedet for at tælle rækker. Standardværdien for geom_bar() er stat = “count”.
Output:
Trin 3) Skift retningen
Du ændrer grafens orientering fra lodret til vandret.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity") + coord_flip()
Code Forklaring
- Du kan styre retningen af grafen med coord_flip().
Output:
Trin 4) Skift farve
Du kan differentiere farverne på søjlerne i henhold til faktorniveauet for x-aksevariablen.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity") + coord_flip() + theme_classic()
Code Forklaring
- Du kan plotte grafen efter grupper med fill=cyl-afbildningenpingR tager sig automatisk af farverne baseret på niveauerne af cyl-variablen
Output:
Trin 5) Skift størrelse
For at få grafen til at se smukkere ud, reducerer du bjælkens bredde.
graph <- ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity", width = 0.5) + coord_flip() + theme_classic()
Code Forklaring
- Breddeargumentet i geom_bar() styrer tykkelsen på bjælken. En større værdi gør den bredere.
- Plottet gemmes i objektgrafen, fordi det næste trin genbruger det uændret. Lagring af mellemliggende plots holder koden læsbar.
Output:
Trin 6) Tilføj etiketter til grafen
Det sidste trin tilføjer værdien af mean_mpg som en etiket i hver søjle.
graph +
geom_text(aes(label = mean_mpg),
hjust = 1.5,
color = "white",
size = 3) +
theme_classic()
Code Forklaring
- Funktionen geom_text() er nyttig til at styre tekstens æstetik.
- label=: Tilføj en etiket inde i søjlerne
- mean_mpg: Brug variablen mean_mpg til etiketten
- hjust styrer, hvor etiketten sidder langs søjlen. Værdier tæt på 1 placerer den nær slutningen af søjlen, og større værdier skubber den tilbage mod aksen. Hvis grafens retning er lodret, skal du ændre hjust til vjust.
- color=”white”: Skift farven på teksten. Her bruger du den hvide farve.
- size=3: Indstil størrelsen på teksten.
Output:
Sådan sorterer og mærker du søjler i et søjlediagram i R
To sidste detaljer adskiller et kladdediagram fra et publicerbart diagram: sortering af søjlerne efter værdi og korrekt mærkning af akserne.
Omarrangering af søjler. ggplot2 arrangerer faktorniveauer alfabetisk som standard, hvilket sjældent er den mest informative rækkefølge. Pak x-variablen ind i reorder() for at sortere efter en anden variabel:
# 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()
Sæt et minustegn foran sorteringsvariablen, reorder(cyl, -mean_mpg), for at vende retningen.
Tilføjelse af titler og aksenavne. Funktionen labs() sætter alle tekstelementer i ét kald:
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()
Sæt fill = NULL inde i labs() for at fjerne forklaringstitlen helt, og brug theme(legend.position = “none”) til at fjerne forklaringen, når x-aksen allerede navngiver grupperne.
Valg af dine egne farver. Erstat standardpaletten med en eksplicit palet, så diagrammet matcher din husstil:
scale_fill_manual(values = c("4" = "#0e9cd1", "6" = "coral", "8" = "grey40"))
Sådan opretter du et histogram i R med geom_histogram()
Et histogram viser, hvordan en enkelt kontinuerlig variabel er fordelt. I stedet for at tælle kategorier, opdeler ggplot2 det numeriske område i beholdere og tæller, hvor mange observationer der falder ind under hver enkelt.
library(ggplot2) # Most basic histogram ggplot(mtcars, aes(x = mpg)) + geom_histogram()
R udskriver en besked, der anbefaler, at du vælger et bedre antal beholdere, fordi standardværdien på 30 beholdere er vilkårlig. To argumenter styrer dette:
- siloerantallet af intervaller, som området skal opdeles i.
- binbredde: bredden af hvert interval, udtrykt i variablens enheder. Brug denne, når enhederne er meningsfulde.
# 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()
Binning er det absolut vigtigste valg i et histogram. For få bins skjuler den reelle struktur, såsom en anden top; for mange forvandler diagrammet til støj. Prøv flere værdier, før du beslutter dig for én.
Sammenligning af grupper. Kortlæg en faktor, der skal udfyldes, og indstil positionen, så fordelingerne forbliver læsbare:
ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + geom_histogram(bins = 10, position = "identity", alpha = 0.5) + theme_classic()
Med position = "identitet" og en reduceret alfa overlapper histogrammerne hinanden, så du kan sammenligne former direkte. Brug position = "udvig", hvis du hellere vil se felterne side om side.
Tæthed i stedet for antal. Når grupperne varierer i størrelse, plottes tætheden, så arealerne er sammenlignelige, og overlappes med en udjævnet kurve:
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()
Søjlediagram og histogram i R: Code Henvisning
Et søjlediagram passer til en kategorisk x-akse, hvor y-aksen enten er en optælling eller en opsummerende statistik. Tabellen nedenfor viser ggplot2-kaldet for hver variant, der er dækket ovenfor:
| Objektiv | Code |
|---|---|
| Tælle |
ggplot(df, aes(x = factor(x1))) + geom_bar() |
| Tæl med forskellig farve på fyld |
ggplot(df, aes(x = factor(x1), fill = factor(x1))) + geom_bar() |
| Tæl med grupper, stablet |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar() |
| Tæl med grupper, side om side |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = position_dodge()) |
| Tæl med grupper, stablet i % |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = "fill") |
| Værdier (sammenfattende statistik) |
ggplot(df, aes(x = factor(x1), y = x2)) + geom_bar(stat = "identity") |
| Histogram af en kontinuerlig variabel |
ggplot(df, aes(x = x1)) + geom_histogram(bins = 30) |













