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.

  • 📊 Základní rozlišení: Sloupcový graf shrnuje kategoriální proměnnou, zatímco histogram rozděluje jednu spojitou proměnnou do intervalů.
  • 🧱 Gramatika grafiky: Každý graf kombinuje datovou sadu, mapu aes()pinga geometrický objekt spojený znaménkem plus.
  • 🎨 Ovládání barev: Pro dosažení jednotné barvy umístěte výplň do geom_bar() a pro vybarvení pruhů podle skupin do aes().
  • 📐 Úpravy polohy: position = „fill“ převede počty na procenta a position_dodge() umístí seskupené sloupce vedle sebe.
  • 🔢 Vykreslování hodnot: Pass stat = „identita“, pokud osa y již obsahuje vypočítanou statistiku, například skupinový průměr.
  • 📏 Binning histogramu: Nastavte biny nebo šířku binu v geom_histogram(), protože výchozí hodnota 30 binů zřídka vyhovuje datům.

Histogram sloupcového grafu v R

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.

  1. První počítá počet výskytů v každé skupině.
  2. 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:

Sloupcový graf: počet

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.

Sloupcový graf: počet

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:

Změňte barvu pruhů

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:

Změňte intenzitu

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:

Barva podle skupin

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:

Přidejte skupinu do pruhů

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:

Sloupcový graf v procentech

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:

Side by Side Bars

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:

Histogram

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:

Histogram

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:

Histogram

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:

Histogram

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:

Histogram

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)

Nejčastější dotazy

Histogram použijte, když je proměnná na ose x spojitá a chcete vidět její rozložení. Sloupcový graf použijte, když osa x obsahuje odlišné kategorie a chcete je porovnat.

Uvnitř funkce aes() je fill namapována na barvu, takže každá skupina má svůj vlastní odstín. Mimo aes(), uvnitř geom_bar(), je fill pevná hodnota aplikovaná na každý pruh.

Neexistuje univerzální odpověď. Začněte s druhou odmocninou z počtu pozorování a poté upravte. Příliš málo intervalů skrývá strukturu, jako je druhý vrchol, a příliš mnoho z nich vytváří zašumený a špičatý graf.

Histogramy jsou standardním prvním krokem v průzkumné analýze dat pro projekty umělé inteligence. Odhalují zkreslení, odlehlé hodnoty a nerovnováhu tříd ještě před trénováním jakéhokoli modelu. Sloupcové grafy poté shrnují důležitost prvků a četnosti kategorií.

Ano. Asistenti s umělou inteligencí dokáží vytvořit vrstvy ggplot2 z jednoduchého popisu grafu a vysvětlit chyby, jako je například chybějící argument stat. Vždy spusťte vygenerovaný kód na vlastních datech, abyste ověřili mapu.ping má pravdu.

Shrňte tento příspěvek takto: