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.

  • 📊 Kerneforskel: Et søjlediagram opsummerer en kategorisk variabel, mens et histogram opdeler en enkelt kontinuerlig variabel i intervaller.
  • 🧱 Grafikkens grammatik: Hvert plot kombinerer et datasæt, et aes()-kortping, og et geometrisk objekt forbundet med plustegnet.
  • 🎨 Farvekontrol: Placer udfyldning i geom_bar() for én ensartet farve, og i aes() for at farve bjælker efter gruppe.
  • 📐 Positionsjusteringer: position = “fill” konverterer antal til procenter, og position_dodge() placerer grupperede søjler side om side.
  • 🔢 Plotningsværdier: Pass stat = "identitet", når y-aksen allerede indeholder en beregnet statistik, såsom en gruppegennemsnit.
  • 📏 Histogram-binning: Indstil bins eller binwidth i geom_histogram(), da standardværdien på 30 bins sjældent passer til dataene.

Søjlediagramhistogram i R

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.

  1. Den første tæller antallet af forekomster i hver gruppe.
  2. 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:

Søjlediagram: antal

Bemærk: sørg for at konvertere variablerne til en faktor ellers behandler R variablerne som numeriske. Se eksemplet nedenfor.

Søjlediagram: antal

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:

Skift farven på søjlerne

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:

Skift intensiteten

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:

Farve efter grupper

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:

Tilføj en gruppe i søjlerne

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:

Søjlediagram i procent

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:

Side om Side barer

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:

Histogram

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:

Histogram

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:

Histogram

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:

Histogram

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:

Histogram

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)

Ofte Stillede Spørgsmål

Brug et histogram, når x-aksens variable er kontinuert, og du vil se dens fordeling. Brug et søjlediagram, når x-aksen indeholder forskellige kategorier, og du vil sammenligne dem.

Inde i aes() knytter fill en variabel til en farve, så hver gruppe får sin egen nuance. Uden for aes(), inde i geom_bar(), er fill en fast værdi, der anvendes på hver søjle.

Der er ikke noget universelt svar. Start med kvadratroden af ​​observationsantallet, og juster derefter. For få intervaller skjuler strukturer såsom en anden top, og for mange producerer et støjende, spidsfindigt diagram.

Histogrammer er det første standardtrin i udforskende dataanalyse til AI-projekter, der afslører skævhed, outliers og klasseubalance, før nogen model trænes. Søjlediagrammer opsummerer derefter funktionernes vigtighed og kategorifrekvenser.

Ja. AI-assistenter kan udarbejde ggplot2-lag ud fra en almindelig beskrivelse af diagrammet og forklare fejl såsom et manglende statistisk argument. Kør altid den genererede kode på dine egne data for at bekræfte kortet.ping det rigtigt.

Opsummer dette indlæg med: