Sloupcový graf a histogram v R s příkladem
⚡ Chytré shrnutí
Sloupcový graf a histogram v R se vytvářejí pomocí ggplot2, s využitím geom_bar() pro kategorické počty a geom_histogram() pro spojité distribuce. Tento návod upravuje barvy, skupiny...ping, stohování, orientace, binning a popisky v rámci sloupce na datové sadě mtcars.

Co je to sloupcový graf v jazyce R?
Sloupcový graf je skvělý způsob, jak zobrazit kategorické proměnné na ose x. Tento typ grafu označuje dva aspekty na ose y.
- První počítá počet výskytů v každé skupině.
- Druhý zobrazuje souhrnnou statistiku (minimum, maximum, průměr atd.) proměnné na ose y.
Použijete datovou sadu mtcars, která má následující proměnné:
- cyl: Číslo válce v autě. Číselná proměnná
- am: Typ přenosu. 0 pro automatické a 1 pro manuální. Číselná proměnná
- mpg: Míle na galon. Číselná proměnná
Protože histogramy vypadají velmi podobně, je vhodné si před psaním jakéhokoli kódu rozdíl vyjasnit.
Sloupcový graf vs. histogram v R: Klíčové rozdíly
Tyto dva grafy vypadají podobně a neustále se pletou. Odpovídají na různé otázky a používají různé geometrické objekty.
| Kritéria | Bar Chart | Histogram |
|---|---|---|
| Proměnná osy X | Kategorický nebo faktor | Kontinuální a numerické |
| Co představuje sloupec | Jedna kategorie | Jeden interval neboli přihrádka hodnot |
| Mezery mezi tyčemi | Ano, kategorie jsou oddělené | Ne, popelnice jsou vedle sebe |
| Objednávka baru | Lze volně přeskupovat | Opraveno numerickou stupnicí |
| Odpověď na otázku | Jak se skupiny porovnávají? | Jak je rozdělena jedna proměnná? |
| objekt ggplot2 | geom_bar() | geom_histogram() |
Základní pravidlo: pokud by změna pořadí sloupců stále dávala smysl, máte sloupcový graf. Pokud by změna pořadí zničila význam, máte histogram. Pro kvartilové souhrny stejné spojité proměnné použijte krabicový graf.
Jak vytvořit sloupcový graf v R
Chcete-li vytvořit graf v R, můžete použít knihovnu ggplot, která vytváří grafy připravené k publikaci. Základní syntaxe této knihovny je:
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()`
Tento tutoriál se zaměřuje na geometrický objekt geom_bar(), který vykresluje sloupcový graf, a na geom_histogram() pro spojitá data.
Sloupcový graf: počet
Váš první graf ukazuje frekvenci válce s geom_bar(). Níže uvedený kód je nejzákladnější syntaxí.
library(ggplot2) # Most basic bar chart ggplot(mtcars, aes(x = factor(cyl))) + geom_bar()
Code Vysvětlení
- Dataset mtcars předáte do ggplot.
- Uvnitř argumentu aes() nastavíte osu x na faktorovou proměnnou cyl.
- Znak + znamená, že chcete, aby R pokračoval ve čtení kódu. Dělá kód čitelnějším tím, že jej prolomí.
- Pro geometrický objekt použijte geom_bar().
Výstup:
Hodnocení: ujistěte se, že jste proměnné převedli na faktor, jinak R bude s proměnnými zacházet jako s číselnými. Viz příklad níže.
Přizpůsobte si graf
Pro přizpůsobení grafu lze předat čtyři argumenty:
- `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
Změňte barvu pruhů
Můžete změnit barvu pruhů. Všimněte si, že barvy pruhů jsou všechny podobné.
# Change the color of the bars ggplot(mtcars, aes(x = factor(cyl))) + geom_bar(fill = "coral") + theme_classic()
Code Vysvětlení
- Barvy pruhů jsou řízeny mapou aes()ping uvnitř geometrického objektu (tj. ne v ggplot()). Barvu můžete změnit pomocí argumentů fill. Zde si vyberete korálovou barvu.
Výstup:
Můžete použít tento kód:
grDevices::colors()
zobrazit všechny dostupné barvy v R. Existuje asi 650 barev.
Změňte intenzitu
Můžete zvýšit nebo snížit intenzitu barvy pruhů
# Change intensity ggplot(mtcars, aes(factor(cyl))) + geom_bar(fill = "coral", alpha = 0.5) + theme_classic()
Code Vysvětlení
- Chcete-li zvýšit/snížit intenzitu pruhu, můžete změnit hodnotu alfa. Velká alfa intenzitu zvyšuje a nízká alfa ji snižuje. Alfa se pohybuje od 0 do 1. Při hodnotě 1 barva přesně odpovídá paletě; při 0 je pruh neviditelný. Zde zvolíte alfa = 0.5.
Výstup:
Barva podle skupin
Můžete změnit barvy pruhů, což znamená jednu jinou barvu pro každou skupinu. Například proměnná cyl má tři úrovně, pak můžete sloupcový graf vykreslit třemi barvami.
# Color by group ggplot(mtcars, aes(factor(cyl), fill = factor(cyl))) + geom_bar()
Code Vysvětlení
- Argument fill uvnitř funkce aes() mění barvu sloupce. Barvu změníte nastavením proměnné fill = osa x. Ve vašem příkladu je proměnná osy x cyl; fill = factor(cyl)
Výstup:
Přidejte skupinu do pruhů
Osu y můžete dále rozdělit na základě jiné úrovně faktoru. Můžete například spočítat počet automatických a manuálních převodovek podle typu válce.
Budete postupovat následovně:
- Krok 1: Vytvořte datový rámec pomocí datové sady mtcars
- Krok 2: Označte proměnnou am jako auto pro automatickou převodovku a man pro manuální převodovku. Převeďte am a cyl jako faktor, abyste ve funkci ggplot() nemuseli používat factor().
- Krok 3: Vyneste do sloupcového grafu počet přenosů podle válce
library(dplyr) # Step 1 data <- mtcars %>% #Step 2 mutate(am = factor(am, labels = c("auto", "man")), cyl = factor(cyl))
S připravenou datovou sadou můžete vykreslit graf:
# Krok 3
ggplot(data, aes(x = cyl, fill = am)) + geom_bar() + theme_classic()
Code Vysvětlení
- Volání ggplot() přijímá data z datové sady a mapu aes().ping.
- V aes() zahrnete proměnnou x-osa a kterou proměnnou je potřeba vyplnit pruh (tj. am)
- geom_bar(): Vytvořte sloupcový graf
Výstup:
Mapaping vyplní sloupec dvěma barvami, jednou pro každou úroveň. Skupinu lze snadno změnit výběrem jiných faktorových proměnných v datové sadě.
Sloupcový graf v procentech
Sloupec můžete zobrazit v procentech namísto hrubého počtu.
# Sloupcový graf v procentech
ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = "fill") + theme_classic()
Code Vysvětlení
- Použijte position = „fill“ v argumentu geom_bar() k vytvoření grafiky s procenty na ose y.
Výstup:
Tyče vedle sebe
Je snadné vykreslit sloupcový graf s proměnnou skupiny vedle sebe.
# Bar chart side by side ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = position_dodge()) + theme_classic()
Code Vysvětlení
- position=position_dodge(): Explicitně říká, jak uspořádat pruhy
Výstup:
Sloupcový graf se souhrnnou statistikou
Ve druhé části tutoriálu osa y nese vypočítanou hodnotu, nikoli počet. Všimněte si, že se stále jedná o sloupcový graf: skutečný histogram je popsán dále a používá jiný geometrický objekt.
Vaším cílem je vytvořit graf s průměrnou mílí na galon pro každý typ válce. Chcete-li nakreslit informativní graf, postupujte takto:
- Krok 1: Vytvořte novou proměnnou s průměrnou mílí na galon na válec
- Krok 2: Vytvořte základní histogram
- Krok 3: Změňte orientaci
- Krok 4: Změňte barvu
- Krok 5: Změňte velikost
- Krok 6: Přidejte do grafu štítky
Krok 1) Vytvořte novou proměnnou
Vytvoříte datový rámec s názvem data_histogram, který jednoduše vrátí průměrné míle na galon podle počtu válců v autě. Tuto novou proměnnou nazvete mean_mpg a střední hodnotu zaokrouhlíte na dvě desetinná místa.
# Krok 1
data_histogram <- mtcars %>% mutate(cyl = factor(cyl)) %>% group_by(cyl) %>% summarize(mean_mpg = round(mean(mpg), 2))
Krok 2) Vytvořte základní histogram
Můžete si vykreslit histogram. Ještě není dostatečně propracovaný, aby se dal předat klientovi, ale už ukazuje trend.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity")
Code Vysvětlení
- Aes() má nyní dvě proměnné. Proměnná cyl odkazuje na osu x a mean_mpg je osa y.
- Předáte stat = „identity“, aby geom_bar() použil proměnnou osy y tak, jak je, místo aby počítal řádky. Výchozí hodnota pro geom_bar() je stat = „count“.
Výstup:
Krok 3) Změňte orientaci
Změníte orientaci grafu z vertikální na horizontální.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity") + coord_flip()
Code Vysvětlení
- Orientaci grafu můžete ovládat pomocí coord_flip().
Výstup:
Krok 4) Změňte barvu
Barvy pruhů můžete rozlišit podle úrovně faktoru proměnné osy x.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity") + coord_flip() + theme_classic()
Code Vysvětlení
- Graf můžete vykreslit po skupinách pomocí mapy fill=cylpingR se automaticky stará o barvy na základě úrovní proměnné cyl.
Výstup:
Krok 5) Změňte velikost
Aby graf vypadal hezčí, zmenšíte šířku pruhu.
graph <- ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity", width = 0.5) + coord_flip() + theme_classic()
Code Vysvětlení
- Argument šířka uvnitř geom_bar() řídí tloušťku sloupce. Větší hodnota jej rozšíří.
- Graf je uložen v grafu objektu, protože další krok jej znovu použije beze změny. Ukládání mezilehlých grafů zachovává čitelnost kódu.
Výstup:
Krok 6) Přidejte štítky do grafu
Poslední krok přidá hodnotu mean_mpg jako popisek do každého sloupce.
graph +
geom_text(aes(label = mean_mpg),
hjust = 1.5,
color = "white",
size = 3) +
theme_classic()
Code Vysvětlení
- Funkce geom_text() je užitečná pro ovládání estetiky textu.
- label=: Přidá štítek do pruhů
- mean_mpg: Pro štítek použijte proměnnou mean_mpg
- Parametr hjust určuje umístění popisku na sloupci. Hodnoty blízké 1 jej umístí blízko konce sloupce a vyšší hodnoty jej posouvají zpět k ose. Pokud je orientace grafu svislá, změňte hjust na vjust.
- color=”white”: Změna barvy textu. Zde použijete bílou barvu.
- size=3: Nastavte velikost textu.
Výstup:
Jak seřadit a označit sloupce v sloupcovém grafu v jazyce R
Dva poslední detaily odlišují koncept grafu od publikovatelného: seřazení sloupců podle hodnoty a správné označení os.
Změna pořadí sloupců. ggplot2 standardně řadí úrovně faktorů abecedně, což je zřídkakdy nejinformativnější pořadí. Pro řazení podle druhé proměnné zabalte proměnnou x do funkce reorder():
# 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()
Pro změnu směru řazení přidejte před proměnnou řazení znaménko mínus, reorder(cyl, -mean_mpg).
Přidávání nadpisů a popisků os. Funkce labs() nastaví všechny textové prvky v jednom volání:
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()
Nastavte fill = NULL uvnitř labs() pro úplné odstranění názvu legendy a použijte theme(legend.position = “none”) pro odstranění legendy, pokud osa x již pojmenovává skupiny.
Výběr vlastních barev. Nahraďte výchozí paletu explicitní paletou, aby tabulka odpovídala stylu vašeho domu:
scale_fill_manual(values = c("4" = "#0e9cd1", "6" = "coral", "8" = "grey40"))
Jak vytvořit histogram v R pomocí geom_histogram()
Histogram ukazuje, jak je rozložena jedna spojitá proměnná. Místo počítání kategorií ggplot2 rozděluje číselný rozsah do přihrádek a spočítá, kolik pozorování spadá do každé z nich.
library(ggplot2) # Most basic histogram ggplot(mtcars, aes(x = mpg)) + geom_histogram()
R vypíše zprávu s doporučením zvolit lepší počet přihrádek, protože výchozí hodnota 30 přihrádek je libovolná. Toto řízení probíhá pomocí dvou argumentů:
- koše: počet intervalů, na které se má rozsah rozdělit.
- šířka koše: šířka každého intervalu vyjádřená v jednotkách proměnné. Použijte tuto možnost, pokud jsou jednotky smysluplné.
# 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 je v histogramu nejdůležitější volbou. Příliš málo přihrádek skrývá skutečnou strukturu, například druhý vrchol; příliš mnoho jich promění graf v šum. Než se usadíte na jedné, vyzkoušejte několik hodnot.
Porovnávání skupin. Namapujte faktor, který chcete vyplnit, a nastavte pozici tak, aby rozdělení zůstala čitelná:
ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + geom_histogram(bins = 10, position = "identity", alpha = 0.5) + theme_classic()
S position = „identity“ a sníženou alfa hodnotou se histogramy překrývají, takže můžete tvary přímo porovnávat. Pokud chcete raději vidět přihrádky vedle sebe, použijte position = „dodge“.
Hustota místo počtů. Pokud se skupiny liší velikostí, vykreslete hustotu tak, aby plochy byly srovnatelné, a překryjte je vyhlazenou křivkou:
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()
Sloupcový graf a histogram v R: Code Odkaz
Sloupcový graf se hodí pro kategorickou osu x, kde osa y představuje buď počet, nebo souhrnnou statistiku. Níže uvedená tabulka uvádí volání ggplot2 pro každou výše uvedenou variantu:
| Objektivní | Code |
|---|---|
| Počítat |
ggplot(df, aes(x = factor(x1))) + geom_bar() |
| Počítejte s různou barvou výplně |
ggplot(df, aes(x = factor(x1), fill = factor(x1))) + geom_bar() |
| Počítejte se skupinami, naskládané |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar() |
| Počítejte se skupinami vedle sebe |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = position_dodge()) |
| Počítat se skupinami, naskládané v % |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = "fill") |
| Hodnoty (souhrnná statistika) |
ggplot(df, aes(x = factor(x1), y = x2)) + geom_bar(stat = "identity") |
| Histogram spojité proměnné |
ggplot(df, aes(x = x1)) + geom_histogram(bins = 30) |













