Stolpediagram og histogram i R med eksempel
⚡ Smart oppsummering
Stolpediagram og histogram i R er bygget med ggplot2, og bruker geom_bar() for kategoriske tellinger og geom_histogram() for kontinuerlige fordelinger. Denne gjennomgangen tilpasser farge, grupperingping, stabling, orientering, binning og etiketter i stolpen på mtcars-datasettet.

Hva er et søylediagram i R?
Et stolpediagram er en fin måte å vise kategoriske variabler på x-aksen. Denne typen grafer angir to aspekter i y-aksen.
- Den første teller antall forekomster i hver gruppe.
- Den andre viser en sammendragsstatistikk (minimum, maksimum, gjennomsnitt og så videre) for en variabel på y-aksen.
Du skal bruke mtcars-datasettet, som har følgende variabler:
- cyl: Nummer på sylinderen i bilen. Numerisk variabel
- am: Type overføring. 0 for automatisk og 1 for manuell. Numerisk variabel
- mpg: Miles per gallon. Numerisk variabel
Fordi et histogram ser så likt ut, er det verdt å avgjøre forskjellen før du skriver kode.
Stolpediagram vs. histogram i R: Viktige forskjeller
De to diagrammene ser like ut, og de blir stadig forvekslet. De svarer på forskjellige spørsmål og bruker forskjellige geometriske objekter.
| Kriterier | Bar Chart | histogram |
|---|---|---|
| X-akse variabel | Kategorisk eller faktor | Kontinuerlig og numerisk |
| Hva en stolpe representerer | Én kategori | Ett intervall, eller en beholder, med verdier |
| Mellomrom mellom stolpene | Ja, kategoriene er separate | Nei, søppelbøttene står ved siden av hverandre |
| Barbestilling | Kan omorganiseres fritt | Fast av den numeriske skalaen |
| Spørsmål besvart | Hvordan er gruppene sammenlignet? | Hvordan er én variabel fordelt? |
| ggplot2-objekt | geom_bar() | geom_histogram() |
Tommelfingerregelen: Hvis det fortsatt gir mening å endre rekkefølgen på søylene, har du et søylediagram. Hvis det å endre rekkefølgen på dem ville ødelegge meningen, har du et histogram. For kvartilbaserte oppsummeringer av den samme kontinuerlige variabelen, bruk et boksplott.
Slik lager du et søylediagram i R
For å lage graf i R, kan du bruke biblioteket ggplot som lager grafer som er klare for publisering. Den grunnleggende syntaksen til dette biblioteket 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 veiledningen fokuserer på det geometriske objektet geom_bar(), som tegner søylediagrammet, og på geom_histogram() for kontinuerlige data.
Stolpediagram: telle
Din første graf viser frekvensen til sylinder med geom_bar(). Koden nedenfor er den mest grunnleggende syntaksen.
library(ggplot2) # Most basic bar chart ggplot(mtcars, aes(x = factor(cyl))) + geom_bar()
Code Forklaring
- Du sender datasettet mtcars til ggplot.
- Inne i aes()-argumentet setter du x-aksen til faktorvariabelen cyl
- +-tegnet betyr at du vil at R skal fortsette å lese koden. Det gjør koden mer lesbar ved å bryte den.
- Bruk geom_bar() for det geometriske objektet.
Utgang:
Merknader: sørg for at du konverterer variablene til en faktor ellers behandler R variablene som numeriske. Se eksempelet nedenfor.
Tilpass grafen
Fire argumenter kan sendes for å 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
Endre fargen på stolpene
Du kan endre fargen på stolpene. Merk at fargene på stolpene er like.
# Change the color of the bars ggplot(mtcars, aes(x = factor(cyl))) + geom_bar(fill = "coral") + theme_classic()
Code Forklaring
- Fargene på stolpene styres av aes()-kartetping inne i det geometriske objektet (dvs. ikke i ggplot()). Du kan endre fargen med fyllargumentene. Her velger du korallfargen.
Utgang:
Du kan bruke denne koden:
grDevices::colors()
for å se alle fargene tilgjengelig i R. Det er rundt 650 farger.
Endre intensiteten
Du kan øke eller redusere intensiteten til stolpenes farge
# Change intensity ggplot(mtcars, aes(factor(cyl))) + geom_bar(fill = "coral", alpha = 0.5) + theme_classic()
Code Forklaring
- For å øke/redusere intensiteten til linjen kan du endre verdien på alfa. En stor alfa øker intensiteten, og lav alfa reduserer intensiteten. Alfa varierer fra 0 til 1. Ved 1 matcher fargen paletten nøyaktig; ved 0 er linjen usynlig. Her velger du alfa = 0.5.
Utgang:
Fargelegg etter grupper
Du kan endre fargene på stolpene, noe som betyr en annen farge for hver gruppe. For eksempel har cyl variabel tre nivåer, så kan du plotte søylediagrammet med tre farger.
# Color by group ggplot(mtcars, aes(factor(cyl), fill = factor(cyl))) + geom_bar()
Code Forklaring
- Argumentet fill i aes() endrer fargen på linjen. Du endrer fargen ved å sette fill = x-aksevariabel. I ditt eksempel er x-aksevariabelen cyl; fill = factor(cyl)
Utgang:
Legg til en gruppe i stolpene
Du kan dele y-aksen videre basert på et annet faktornivå. For eksempel kan du telle antall automatiske og manuelle girkasser basert på sylindertypen.
Du vil fortsette som følger:
- Trinn 1: Lag datarammen med mtcars datasett
- Trinn 2: Merk am variabelen med auto for automatgir og man for manuell girkasse. Konverter am og cyl som en faktor slik at du ikke trenger å bruke factor() i ggplot()-funksjonen.
- Trinn 3: Plott søylediagrammet for å telle antall overføringer per sylinder
library(dplyr) # Step 1 data <- mtcars %>% #Step 2 mutate(am = factor(am, labels = c("auto", "man")), cyl = factor(cyl))
Når datasettet er klart, kan du plotte grafen:
# Trinn 3
ggplot(data, aes(x = cyl, fill = am)) + geom_bar() + theme_classic()
Code Forklaring
- ggplot()-kallet mottar datasettet og aes()-kartetping.
- I aes() inkluderer du variabelen x-aksen og hvilken variabel som kreves for å fylle linjen (dvs. am)
- geom_bar(): Lag søylediagrammet
Utgang:
Kartetping vil fylle linjen med to farger, én for hvert nivå. Det er enkelt å endre gruppen ved å velge andre faktorvariabler i datasettet.
Stolpediagram i prosent
Du kan visualisere søylen i prosent i stedet for det rå antallet.
# Stolpediagram i prosent
ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = "fill") + theme_classic()
Code Forklaring
- Bruk posisjon = "fyll" i geom_bar()-argumentet for å lage en grafikk med prosent i y-aksen.
Utgang:
Side ved side stenger
Det er enkelt å plotte stolpediagrammet med gruppevariabelen side ved 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(): Forteller eksplisitt hvordan stolpene skal arrangeres
Utgang:
Stolpediagram med en sammendragsstatistikk
I den andre delen av veiledningen viser y-aksen en beregnet verdi i stedet for et antall. Merk at dette fortsatt er et søylediagram: et ekte histogram er beskrevet lenger ned, og det bruker et annet geometrisk objekt.
Målet ditt er å lage en graf med gjennomsnittlig mil per gallon for hver type sylinder. For å tegne en informativ graf, følger du disse trinnene:
- Trinn 1: Lag en ny variabel med gjennomsnittlig mil per gallon per sylinder
- Trinn 2: Lag et grunnleggende histogram
- Trinn 3: Endre retningen
- Trinn 4: Endre fargen
- Trinn 5: Endre størrelsen
- Trinn 6: Legg til etiketter i grafen
Trinn 1) Opprett en ny variabel
Du oppretter en dataramme kalt data_histogram som ganske enkelt returnerer gjennomsnittlige miles per gallon etter antall sylindre i bilen. Du kaller denne nye variabelen mean_mpg, og du avrunder gjennomsnittet med to desimaler.
# Trinn 1
data_histogram <- mtcars %>% mutate(cyl = factor(cyl)) %>% group_by(cyl) %>% summarize(mean_mpg = round(mean(mpg), 2))
Trinn 2) Lag et grunnleggende histogram
Du kan plotte histogrammet. Det er ikke polert nok til å gi det til en klient ennå, men det viser allerede trenden.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity")
Code Forklaring
- Aes() har nå to variabler. Cyl-variabelen refererer til x-aksen, og mean_mpg er y-aksen.
- Du sender stat = «identitet» slik at geom_bar() bruker y-aksevariabelen som den er i stedet for å telle rader. Standardverdien for geom_bar() er stat = «telling».
Utgang:
Trinn 3) Endre retningen
Du endrer retningen på grafen fra vertikal til horisontal.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity") + coord_flip()
Code Forklaring
- Du kan kontrollere retningen til grafen med coord_flip().
Utgang:
Trinn 4) Endre fargen
Du kan differensiere fargene på stolpene i henhold til faktornivået til x-aksevariabelen.
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 etter grupper med fill= cyl-avbildningenpingR tar seg automatisk av fargene basert på nivåene til sylindriske variabler
Utgang:
Trinn 5) Endre størrelse
For å få grafen til å se penere ut, reduserer du bredden på stolpen.
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å linjen. En større verdi gjør den bredere.
- Plottet lagres i objektgrafen, fordi det neste trinnet bruker det uendret. Lagring av mellomliggende plott holder koden lesbar.
Utgang:
Trinn 6) Legg til etiketter i grafen
Det siste trinnet legger til verdien av mean_mpg som en etikett i hver stolpe.
graph +
geom_text(aes(label = mean_mpg),
hjust = 1.5,
color = "white",
size = 3) +
theme_classic()
Code Forklaring
- Funksjonen geom_text() er nyttig for å kontrollere tekstens estetikk.
- label=: Legg til en etikett inne i stolpene
- mean_mpg: Bruk variabelen mean_mpg for etiketten
- hjust styrer hvor etiketten plasseres langs linjen. Verdier nær 1 plasserer den nær slutten av linjen, og større verdier skyver den tilbake mot aksen. Hvis grafens retning er vertikal, endrer du hjust til vjust.
- color=”white”: Endre fargen på teksten. Her bruker du den hvite fargen.
- size=3: Angi størrelsen på teksten.
Utgang:
Slik sorterer og merker du søyler i et søylediagram i R
To siste finpusser skiller et utkastdiagram fra et publiserbart diagram: sortering av stolpene etter verdi og riktig merking av aksene.
Omorganisering av stolper. ggplot2 sorterer faktornivåer alfabetisk som standard, noe som sjelden er den mest informative rekkefølgen. Pakk inn x-variabelen i reorder() for å sortere etter en annen 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()
Sett et minustegn foran sorteringsvariabelen, reorder(cyl, -mean_mpg), for å reversere retningen.
Legge til titler og akseetiketter. labs()-funksjonen setter hvert tekstelement i ett kall:
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()
Sett fill = NULL i labs() for å fjerne forklaringstittelen fullstendig, og bruk theme(legend.position = “none”) for å fjerne forklaringen når x-aksen allerede navngir gruppene.
Å velge dine egne farger. Erstatt standardpaletten med en eksplisitt palett slik at diagrammet samsvarer med husstilen din:
scale_fill_manual(values = c("4" = "#0e9cd1", "6" = "coral", "8" = "grey40"))
Hvordan lage et histogram i R med geom_histogram()
Et histogram viser hvordan en enkelt kontinuerlig variabel er fordelt. I stedet for å telle kategorier, deler ggplot2 det numeriske området inn i binger og teller hvor mange observasjoner som faller inn i hver enkelt.
library(ggplot2) # Most basic histogram ggplot(mtcars, aes(x = mpg)) + geom_histogram()
R skriver ut en melding som anbefaler at du velger et bedre antall beholdere, fordi standardinnstillingen på 30 beholdere er vilkårlig. To argumenter styrer dette:
- bingerantall intervaller som skal deles inn i.
- binbredde: bredden på hvert intervall, uttrykt i enhetene til variabelen. Bruk denne når enhetene er meningsfulle.
# 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 aller viktigste valget i et histogram. For få bins skjuler den virkelige strukturen, som for eksempel en andre topp; for mange gjør diagrammet til støy. Prøv flere verdier før du bestemmer deg for én.
Sammenligning av grupper. Tilordne en faktor som skal fylles og angi posisjonen slik at fordelingene forblir lesbare:
ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + geom_histogram(bins = 10, position = "identity", alpha = 0.5) + theme_classic()
Med posisjon = «identitet» og redusert alfa overlapper histogrammene hverandre, slik at du kan sammenligne former direkte. Bruk posisjon = «utvike» hvis du heller vil se boksene side om side.
Tetthet i stedet for antall. Når gruppene har ulik størrelse, plott tettheten slik at arealene er sammenlignbare, og legg en utjevnet kurve over hverandre:
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()
Stolpediagram og histogram i R: Code Referanse
Et søylediagram passer til en kategorisk x-akse, der y-aksen enten er et antall eller en sammendragsstatistikk. Tabellen nedenfor viser ggplot2-kallet for hver variant som er dekket ovenfor:
| Målet | Code |
|---|---|
| Telle |
ggplot(df, aes(x = factor(x1))) + geom_bar() |
| Tell med forskjellig farge på fyll |
ggplot(df, aes(x = factor(x1), fill = factor(x1))) + geom_bar() |
| Tell med grupper, stablet |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar() |
| Tell med grupper, side om side |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = position_dodge()) |
| Tell med grupper, stablet i % |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = "fill") |
| Verdier (sammendragsstatistikk) |
ggplot(df, aes(x = factor(x1), y = x2)) + geom_bar(stat = "identity") |
| Histogram av en kontinuerlig variabel |
ggplot(df, aes(x = x1)) + geom_histogram(bins = 30) |













