Stapeldiagram och histogram i R med exempel
โก Smart sammanfattning
Stapeldiagram och histogram i R รคr byggda med ggplot2, med geom_bar() fรถr kategoriska rรคkningar och geom_histogram() fรถr kontinuerliga fรถrdelningar. Denna genomgรฅng anpassar fรคrg, grupperingping, stapling, orientering, binning och etiketter i stapeln pรฅ mtcars-datasetet.

Vad รคr ett stapeldiagram i R?
Ett stapeldiagram รคr ett utmรคrkt sรคtt att visa kategoriska variabler i x-axeln. Denna typ av graf betecknar tvรฅ aspekter pรฅ y-axeln.
- Den fรถrsta rรคknar antalet fรถrekomster i varje grupp.
- Den andra visar en sammanfattande statistik (minimum, maximum, medelvรคrde och sรฅ vidare) fรถr en variabel pรฅ y-axeln.
Du kommer att anvรคnda mtcars-datasetet, som har fรถljande variabler:
- cyl: Nummer pรฅ cylindern i bilen. Numerisk variabel
- am: Typ av รถverfรถring. 0 fรถr automatisk och 1 fรถr manuell. Numerisk variabel
- mpg: Miles per gallon. Numerisk variabel
Eftersom ett histogram ser sรฅ likt ut รคr det vรคrt att lรถsa skillnaden innan man skriver nรฅgon kod.
Stapeldiagram vs. histogram i R: Viktiga skillnader
De tvรฅ diagrammen ser likadana ut och fรถrvรคxlas stรคndigt. De besvarar olika frรฅgor och anvรคnder olika geometriska objekt.
| Kriterier | Stapeldiagram | Histogram |
|---|---|---|
| X-axelvariabel | Kategorisk eller faktor | Kontinuerlig och numerisk |
| Vad en stapel representerar | En kategori | Ett intervall, eller en bin, med vรคrden |
| Mellanrum mellan staplarna | Ja, kategorierna รคr separata | Nej, soptunnor stรฅr bredvid varandra |
| Barbestรคllning | Kan omorganiseras fritt | Fixerad av den numeriska skalan |
| Frรฅga besvarad | Hur stรฅr sig grupperna i jรคmfรถrelse? | Hur รคr en variabel fรถrdelad? |
| ggplot2-objekt | geom_bar() | geom_histogram() |
Tumregeln: om det fortfarande vore meningsfullt att รคndra ordningen pรฅ staplarna har du ett stapeldiagram. Om det skulle fรถrstรถra betydelsen har du ett histogram. Fรถr kvartilbaserade sammanfattningar av samma kontinuerliga variabel, anvรคnd ett box tomt.
Hur man skapar ett stapeldiagram i R
Fรถr att skapa en graf i R, kan du anvรคnda biblioteket ggplot som skapar grafer som รคr fรคrdiga fรถr publicering. Den grundlรคggande syntaxen fรถr detta bibliotek รคr:
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()`
Den hรคr handledningen fokuserar pรฅ det geometriska objektet geom_bar(), som ritar stapeldiagrammet, och pรฅ geom_histogram() fรถr kontinuerliga data.
Stapeldiagram: rรคkna
Din fรถrsta graf visar cylinderfrekvensen med geom_bar(). Koden nedan รคr den mest grundlรคggande syntaxen.
library(ggplot2) # Most basic bar chart ggplot(mtcars, aes(x = factor(cyl))) + geom_bar()
Code Fรถrklaring
- Du skickar datasetet mtcars till ggplot.
- Inuti argumentet aes() stรคller du in x-axeln pรฅ faktorvariabeln cyl
- Tecknet + betyder att du vill att R ska fortsรคtta lรคsa koden. Det gรถr koden mer lรคsbar genom att bryta den.
- Anvรคnd geom_bar() fรถr det geometriska objektet.
Produktion:
Anmรคrkningar: se till att du konverterar variablerna till en faktor annars behandlar R variablerna som numeriska. Se exemplet nedan.
Anpassa grafen
Fyra argument kan skickas fรถr att anpassa 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
รndra fรคrgen pรฅ staplarna
Du kan รคndra fรคrgen pรฅ staplarna. Observera att fรคrgerna pรฅ staplarna alla รคr lika.
# Change the color of the bars ggplot(mtcars, aes(x = factor(cyl))) + geom_bar(fill = "coral") + theme_classic()
Code Fรถrklaring
- Fรคrgerna pรฅ staplarna styrs av aes()-kartanping inuti det geometriska objektet (dvs. inte i ggplot()). Du kan รคndra fรคrgen med fyllningsargumenten. Hรคr vรคljer du korallfรคrgen.
Produktion:
Du kan anvรคnda den hรคr koden:
grDevices::colors()
fรถr att se alla fรคrger som finns tillgรคngliga i R. Det finns cirka 650 fรคrger.
รndra intensiteten
Du kan รถka eller minska intensiteten pรฅ staplarnas fรคrg
# Change intensity ggplot(mtcars, aes(factor(cyl))) + geom_bar(fill = "coral", alpha = 0.5) + theme_classic()
Code Fรถrklaring
- Fรถr att รถka/minska stapelns intensitet kan du รคndra vรคrdet pรฅ alfa. En hรถg alfa รถkar intensiteten och lรฅg alfa minskar intensiteten. Alfa varierar frรฅn 0 till 1. Vid 1 matchar fรคrgen paletten exakt; vid 0 รคr stapeln osynlig. Hรคr vรคljer du alfa = 0.5.
Produktion:
Fรคrglรคgg efter grupper
Du kan รคndra fรคrgerna pรฅ staplarna, vilket betyder en annan fรคrg fรถr varje grupp. Till exempel har cyl variabel tre nivรฅer, dรฅ kan du rita stapeldiagrammet med tre fรคrger.
# Color by group ggplot(mtcars, aes(factor(cyl), fill = factor(cyl))) + geom_bar()
Code Fรถrklaring
- Argumentet fill inuti aes() รคndrar fรคrgen pรฅ stapeln. Du รคndrar fรคrgen genom att sรคtta fill = x-axelvariabeln. I ditt exempel รคr x-axelvariabeln cyl; fill = factor(cyl)
Produktion:
Lรคgg till en grupp i staplarna
Du kan ytterligare dela upp y-axeln baserat pรฅ en annan faktornivรฅ. Till exempel kan du rรคkna antalet automatiska och manuella vรคxellรฅdor baserat pรฅ cylindertypen.
Du kommer att gรฅ tillvรคga enligt fรถljande:
- Steg 1: Skapa dataramen med mtcars dataset
- Steg 2: Mรคrk variabeln am med auto fรถr automatisk vรคxellรฅda och man fรถr manuell vรคxellรฅda. Konvertera am och cyl som en faktor sรฅ att du inte behรถver anvรคnda factor() i ggplot()-funktionen.
- Steg 3: Rita stapeldiagrammet fรถr att rรคkna antalet transmissioner per cylinder
library(dplyr) # Step 1 data <- mtcars %>% #Step 2 mutate(am = factor(am, labels = c("auto", "man")), cyl = factor(cyl))
Med datamรคngden klar kan du rita grafen:
# Steg 3
ggplot(data, aes(x = cyl, fill = am)) + geom_bar() + theme_classic()
Code Fรถrklaring
- Anropet ggplot() tar emot datamรคngden och aes()-kartanping.
- I aes() inkluderar du variabeln x-axeln och vilken variabel som krรคvs fรถr att fylla stapeln (dvs. am)
- geom_bar(): Skapa stapeldiagrammet
Produktion:
Kartanping kommer att fylla stapeln med tvรฅ fรคrger, en fรถr varje nivรฅ. Det รคr enkelt att รคndra gruppen genom att vรคlja andra faktorvariabler i datamรคngden.
Stapeldiagram i procent
Du kan visualisera stapeln i procent istรคllet fรถr det rรฅa antalet.
# Stapeldiagram i procent
ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = "fill") + theme_classic()
Code Fรถrklaring
- Anvรคnd position = โfillโ i argumentet geom_bar() fรถr att skapa en grafik med procent i y-axeln.
Produktion:
Sida vid sida barer
Det รคr lรคtt att plotta stapeldiagrammet med gruppvariabeln sida vid sida.
# Bar chart side by side ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = position_dodge()) + theme_classic()
Code Fรถrklaring
- position=position_dodge(): Berรคttar uttryckligen hur man ordnar staplarna
Produktion:
Stapeldiagram med sammanfattande statistik
I den andra delen av handledningen visar y-axeln ett berรคknat vรคrde snarare รคn ett antal. Observera att detta fortfarande รคr ett stapeldiagram: ett verkligt histogram beskrivs lรคngre ner och det anvรคnder ett annat geometriskt objekt.
Ditt mรฅl รคr att skapa en graf med den genomsnittliga milen per gallon fรถr varje typ av cylinder. Fรถr att rita en informativ graf fรถljer du dessa steg:
- Steg 1: Skapa en ny variabel med den genomsnittliga milen per gallon per cylinder
- Steg 2: Skapa ett grundlรคggande histogram
- Steg 3: รndra orienteringen
- Steg 4: รndra fรคrg
- Steg 5: รndra storleken
- Steg 6: Lรคgg till etiketter i diagrammet
Steg 1) Skapa en ny variabel
Du skapar en dataram som heter data_histogram som helt enkelt returnerar genomsnittliga miles per gallon med antalet cylindrar i bilen. Du kallar denna nya variabel mean_mpg, och du avrundar medelvรคrdet med tvรฅ decimaler.
# Steg 1
data_histogram <- mtcars %>% mutate(cyl = factor(cyl)) %>% group_by(cyl) %>% summarize(mean_mpg = round(mean(mpg), 2))
Steg 2) Skapa ett grundlรคggande histogram
Du kan rita histogrammet. Det รคr รคnnu inte tillrรคckligt polerat fรถr att ge det till en klient, men det visar redan trenden.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity")
Code Fรถrklaring
- aes() har nu tvรฅ variabler. Cyl-variabeln hรคnvisar till x-axeln, och mean_mpg รคr y-axeln.
- Du skickar stat = "identity" sรฅ att geom_bar() anvรคnder y-axelvariabeln som den รคr istรคllet fรถr att rรคkna rader. Standardvรคrdet fรถr geom_bar() รคr stat = "count".
Produktion:
Steg 3) รndra orienteringen
Du รคndrar grafens orientering frรฅn vertikal till horisontell.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity") + coord_flip()
Code Fรถrklaring
- Du kan styra grafens orientering med coord_flip().
Produktion:
Steg 4) รndra fรคrgen
Du kan differentiera fรคrgerna pรฅ staplarna efter faktornivรฅn fรถr x-axelvariabeln.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity") + coord_flip() + theme_classic()
Code Fรถrklaring
- Du kan plotta grafen i grupper med fill= cyl-avbildningenpingR tar automatiskt hand om fรคrgerna baserat pรฅ nivรฅerna av cyl-variabler
Produktion:
Steg 5) รndra storleken
Fรถr att grafen ska se snyggare ut minskar du bredden pรฅ stapeln.
graph <- ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity", width = 0.5) + coord_flip() + theme_classic()
Code Fรถrklaring
- Breddargumentet i geom_bar() styr stapelns tjocklek. Ett stรถrre vรคrde gรถr den bredare.
- Diagrammet lagras i objektgrafen, eftersom nรคsta steg รฅteranvรคnder det ofรถrรคndrat. Att lagra mellanliggande diagram hรฅller koden lรคsbar.
Produktion:
Steg 6) Lรคgg till etiketter i diagrammet
Det sista steget lรคgger till vรคrdet mean_mpg som en etikett inuti varje stapel.
graph +
geom_text(aes(label = mean_mpg),
hjust = 1.5,
color = "white",
size = 3) +
theme_classic()
Code Fรถrklaring
- Funktionen geom_text() รคr anvรคndbar fรถr att styra textens estetik.
- label=: Lรคgg till en etikett inuti staplarna
- mean_mpg: Anvรคnd variabeln mean_mpg fรถr etiketten
- hjust styr var etiketten placeras lรคngs stapeln. Vรคrden nรคra 1 placerar den nรคra slutet av stapeln, och stรถrre vรคrden flyttar den tillbaka mot axeln. Om grafens orientering รคr vertikal, รคndra hjust till vjust.
- color=โwhiteโ: รndra fรคrgen pรฅ texten. Hรคr anvรคnder du den vita fรคrgen.
- size=3: Stรคll in storleken pรฅ texten.
Produktion:
Hur man ordnar och mรคrker staplar i ett stapeldiagram i R
Tvรฅ sista detaljer skiljer ett utkast till ett diagram frรฅn ett publicerbart: sortering av staplarna efter vรคrde och korrekt mรคrkning av axlarna.
รndra ordning pรฅ staplar. ggplot2 ordnar faktornivรฅerna alfabetiskt som standard, vilket sรคllan รคr den mest informativa ordningen. Radbryt variabeln x i reorder() fรถr att sortera efter en andra 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รคtt ett minustecken fรถre sorteringsvariabeln, reorder(cyl, -mean_mpg), fรถr att vรคnda riktningen.
Lรคgga till titlar och axeletiketter. Funktionen labs() stรคller in varje textelement i ett anrop:
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รคtt fill = NULL inuti labs() fรถr att ta bort fรถrklaringstiteln helt och hรฅllet, och anvรคnd theme(legend.position = โnoneโ) fรถr att ta bort fรถrklaringen nรคr x-axeln redan namnger grupperna.
Att vรคlja dina egna fรคrger. Ersรคtt standardpaletten med en explicit palett sรฅ att diagrammet matchar din husstil:
scale_fill_manual(values = c("4" = "#0e9cd1", "6" = "coral", "8" = "grey40"))
Hur man skapar ett histogram i R med geom_histogram()
Ett histogram visar hur en enskild kontinuerlig variabel รคr fรถrdelad. Istรคllet fรถr att rรคkna kategorier delar ggplot2 upp det numeriska intervallet i fack och rรคknar hur mรฅnga observationer som faller inom varje kategori.
library(ggplot2) # Most basic histogram ggplot(mtcars, aes(x = mpg)) + geom_histogram()
R skriver ut ett meddelande som rekommenderar att du vรคljer ett bรคttre antal fack, eftersom standardvรคrdet pรฅ 30 fack รคr godtyckligt. Tvรฅ argument styr detta:
- bins: antalet intervall att dela upp intervallet i.
- binbredd: bredden pรฅ varje intervall, uttryckt i variabelns enheter. Anvรคnd denna nรคr enheterna รคr meningsfulla.
# 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 รคr det enskilt viktigaste valet i ett histogram. Fรถr fรฅ bins dรถljer verklig struktur, sรฅsom en andra topp; fรถr mรฅnga gรถr diagrammet till brus. Testa flera vรคrden innan du bestรคmmer dig fรถr ett.
Jรคmfรถra grupper. Mappa en faktor att fylla och ange positionen sรฅ att fรถrdelningarna fรถrblir lรคsbara:
ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + geom_histogram(bins = 10, position = "identity", alpha = 0.5) + theme_classic()
Med position = โidentitetโ och reducerad alfa รถverlappar histogrammen varandra sรฅ att du kan jรคmfรถra former direkt. Anvรคnd position = โdodgeโ om du hellre vill se rutorna sida vid sida.
Densitet istรคllet fรถr antal. Nรคr grupperna skiljer sig รฅt i storlek, plotta densiteten sรฅ att ytorna รคr jรคmfรถrbara och lรคgg en utjรคmnad kurva รถver varandra:
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()
Stapeldiagram och histogram i R: Code Hรคnvisning
Ett stapeldiagram passar fรถr en kategorisk x-axel, dรคr y-axeln antingen รคr ett antal eller en sammanfattningsstatistik. Tabellen nedan listar ggplot2-anropet fรถr varje variant som behandlas ovan:
| Mรฅl | Code |
|---|---|
| Att Rรคkna |
ggplot(df, aes(x = factor(x1))) + geom_bar() |
| Rรคkna med olika fรคrg pรฅ fyllningen |
ggplot(df, aes(x = factor(x1), fill = factor(x1))) + geom_bar() |
| Rรคkna med grupper, staplade |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar() |
| Rรคkna med grupper, sida vid sida |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = position_dodge()) |
| Rรคkna med grupper, staplade i % |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = "fill") |
| Vรคrden (sammanfattande statistik) |
ggplot(df, aes(x = factor(x1), y = x2)) + geom_bar(stat = "identity") |
| Histogram fรถr en kontinuerlig variabel |
ggplot(df, aes(x = x1)) + geom_histogram(bins = 30) |













