Autor článku: Lenka Fiřtová

V tomto článku si ukážeme, jak vytvořit histrogram s balíčkem ggplot2. Budeme pracovat s datasetem trees, který je v R volně k dispozici. Dataset obsahuje údaje o průměru, výšce a objemu dřeva 31 různých stromů (sloupce Girth, Height, Volume; pozn: Girth sice v angličtině neznamená průměr, nicméně dataset skutečně obsahuje údaje o průměru).

Balíček ggplot2

Balíček ggplot2 je nejkomplexnější balíček na vytváření grafů, který byl pro R dosud vytvořen. Umožňuje vytvářet širokou paletu grafů, od bodových, přes histogramy, po grafické zobrazení korelací a mnohé další. V R lze sice vytvořit grafy i bez tohoto balíčku, avšak balíček ggplot2 umožňuje získat mnohem hezčí grafy, a to s minimem úsilí.

Před prvním použitím si musíme tento balíček nainstalovat příkazem install.packages a následně načíst příkazem library. Při každém dalším použití tohoto balíčku už stačí použít pouze příkaz library.

> install.packages("ggplot2")
> library(ggplot2)

V tomto článku se budeme zabývat histogramy; další funkce balíčku ggplot2 (např. barevné rozlišení kategorií jako třeba muž/žena v grafu) najdete například v článku o bodových grafech.

Před použitím datasetu trees si upravíme veličinu Height, s níž budeme pracovat, tak aby byla v měrných jednotkách, na které jsme zvyklí. V původním datasetu je totiž průměr uvedena ve stopách. Převedeme ji metry, a to následujícím způsobem:

> trees$Height = 0.3 * trees$Height

 

Základní histogram

Histogram zachycuje četnost výskytu určité veličiny v předem daných intervalech (například kolik stromů měří 5 až 10 metrů, kolik 10 až 15 metrů atd.).

Prvním krokem při tvorbě grafu v balíčku ggplot2 je příprava podkladu. To znamená, že řekneme Rku, jaké veličiny má graf zobrazovat. Podklad nazveme muj_hist.

> muj_hist = ggplot(trees, aes(Height))

Konkrétně: uvedeným příkazem říkáme, že vytváříme proměnnou muj_hist, která bude obsahovat graf postavený na základě datasetu trees, přičemž na ose x bude výška (Height). Protože se bude jednat o histogram, osu y nemusíme specifikovat: automaticky se nastaví na počet stromů (absolutní četnost). Jak vidíme, argument aes specifikuje, co bude na ose.

Když si proměnnou muj_graf zobrazíme, uvidíme, že graf je prázdný.

> muj_hist

To proto, že jsme Rku ještě neřekli, jakým způsobem má data zobrazit. My bychom chtěli data zobrazit jako histogram. K podkladu muj_graf tedy přidáme příkaz geom_historam(), čímž se do grafu dokreslí histogram. Rovnou můžeme specifikovat, že histogram má mít černé ohraničení (argument color) a bílou výplň (argument fill). Ohraničení i výplň lze samozřejmě nastavit na libovolnou barvu. Dostupných barev je v R celá škála, viz například: http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf.

> muj_hist + geom_histogram(color = "black", fill = "white")

Vidíme, že Rko nastavilo šířku intervalů defaultně, takže jsou poměrně úzké. Pokud chceme šířku intervalů přenastavit, použijeme příkaz binwidth. Nastavíme šířku intervalu například na 1 metr:

> muj_hist + geom_histogram(color = "black", fill = "white", binwidth = 1)

Z grafu můžeme vyčíst, že je mezi stromy právě jeden s výškou od 19,5 do 20,5 metrů, nebo právě čtyři stromy s výškou od 22,5 do 23,5 metrů.

 

Rozdělení histrogramů dle kategorií

Balíček ggplot umožňuje i rozdělit histogram do vícero histogramů podle kategorií. Abychom si to mohli ukázat, přidejme do datasetu sloupec se (smyšleným) údajem o tom, zda jde o listnatý nebo jehličnatý strom. Příkazem sample tak, jak je napsán níže, vybereme 31krát jednu z možností „listnaty“, „jehlicnaty“ a těchto 31 údajů uložíme do proměnné typ.

> typ = sample(c("listnaty","jehlicnaty"), 31, replace = TRUE)

Příkazem as.factor přepneme proměnnou typ na kategoriální. To je důležité, protože R včetně balíčku ggplot2 pracuje s kategoriálními proměnnými poněkud odlišně než například s číselnými (podobněji viz https://exceltown.com/navody/jazyk-r/kategorialni-promenne-v-jazyce-r-factors/).

> typ = as.factor(typ)

Tuto proměnnou pak můžeme přilepit příkazem cbind k datasetu trees jako další sloupec.

> typ = cbind(trees, typ)

Nyní už snadno řekneme Rku, že má zobrazit histogramy zvlášť právě podle typu stromu, a to následovně – přidáme příkaz facet_grid:

> muj_hist + geom_histogram(color="black", fill="white", binwidth = 1) + facet_grid(typ ~ .)

Údaj, zda je strom jehličnatý nebo listnatý, byl vygenerován náhodně, proto se váš vlastní graf bude pochopitelně lišit.