V sérii několika navazujících článků si představíme tři nejčastěji využívané balíky z kolekce R balíků – tidyverse, navržených pro datovou vědu Hadley Wickhamem a jeho týmem. Jedná se o balík k vizualizaci dat – ggplot2, balík k manipulaci s daty – dplyr a balík k čištění dat – tidyr. Instalaci kompletní sady lze udělat s využitím funkce install.packages() a poté načítaní pomocí funkce library(). Alternativou je instalace každého balíčku samostatně.
Vizualizace dat s balíkem ggplot2
V prvním článku se zaměříme na balík ggplot2, který je v jazyce R k dispozici pro pokročilejší vizualizace dat. Na rozdíl od většiny ostatních grafických balíčků je ggplot2 založen na konceptu „Grammar of Graphics“, který umožní skládat grafy kombinací nezávislých komponent. Spíše než se omezovat na sady předdefinovaných grafů, můžete vytvořit nové grafy, které budou přizpůsobeny vašemu konkrétnímu zadání. A pokud máte také speciální požadavky na formátování, komplexní systém motivů vám usnadní dělat to, co chcete. Navíc budou grafy vypadat profesionálně.
V článku popíšeme soubor základních principů a postupů, jak zkonstruovat jakýkoliv typ grafu a také upozorníme na mnoho užitečných funkcí, které posunou graf na vyšší úroveň.
Při vytváření grafu je ve většině případů nejdříve volaná funkce ggplot(), která má dva základní argumenty: data, mapping. Výchozí datová sada musí být ve formě datového rámce (dataframe). Pokud není, je nutné si datovou sadu nejdříve připravit do požadované formy. Funkci ggplot() předáme jak zdroj dat, tak i specifikaci mapování proměnných pomocí funkce aes(). To si představíme na jednoduchém příkladě dvojrozměrného bodového grafu, který bude zobrazovat závislost dvou kvantitativních proměnných x a y (vlastní data). Prvním argumentem funkce aes() je proměnná na ose x, druhým argumentem je proměnná na ose y. Další možnosti vstupu zahrnují color, size, shape, … Příkazový řádek by vypadal následovně:
Pokud graf zobrazíme, vykreslí se jen prázdná plocha (ovšem se správně nastavenými rozsahy na osách). A to proto, že není specifikováno mapování mezi daty a způsobem jejich zobrazení. Funkce ggplot() vytvoří jenom počáteční objekt, za kterým je nutné do grafu pomocí znaménka + přidávat komponenty jako jsou vrstvy, škály, souřadnicový systém, motiv akomponenta pro dělení grafu.
Existují tři běžné způsoby, jak vyvolat funkci ggplot():
První způsob se doporučuje, pokud všechny vrstvy používají stejná data a stejnou sadu estetiky (specifikaci mapování proměnných). Druhá metoda určuje výchozí datový rámec, který se má použít pro celý graf, ale předem není definována žádná estetika. Ta se může lišit od jedné vrstvy k druhé. Třetí metoda inicializuje kostru objektu ggplot, která se při přidávání vrstev rozšíří. Tato metoda se často používá v případě složitých grafů.
Nejdůležitější komponentou při tvorbě grafu je vrstva. Vrstvy představují soubor geometrických prvků (geom) a statistických transformací (stat). Geometrické prvky graficky znázorňují data a představují to, co ve grafu skutečně uvidíte: body, čáry, polygony atd. K zobrazení požadovaného tvaru proměnných se k objektu pomocí znaménka + přidá geometrický prvek, například +geom_point(), +geom_bar(), +geom_density(), +geom_line(), +geom_rect(), apod. Statistické transformace dopočítávají další proměnné, které se při vizualizaci dat použijí. Například při tvorbě histogramu se používá funkce +stat_bin(), která dopočítává počet pozorovaní v každém intervalu.
Budeme pokračovat v zobrazení závislosti dvou kvantitativních proměnných. Máme definovaný objekt p, následně přidáme vrstvu +geom_point(), která vykreslí body. Bodový graf je také běžně modifikován například přidáním třetí proměnné s využitím barev nebo znaků. Požadavek na třetí proměnnou lze definovat v rámci funkce +geom_point(). Body v grafu můžete také proložit křivkou, a to tak, že přidáte pomocí znaménka + další vrstvu, +geom_smooth(), v které definujete argument method. Geometrické prvky se tak budou vykreslovat v pořadí, v jakém byly přidány. Příkazové řádky pro tři grafy by vypadaly následovně:
Všimněte si, že znaménko + , které slouží k přidání vrstvy musí být umístěno na konci řádku. Pokud by jste místo toho přidali + do řádku před další vrstvu, ggplot2 novou vrstvu nepřidá a vrátí chybovou hlášku.
Další důležitou komponentou je škála (scale). Škály umožňují definovat různé barvy, tvary, velikosti. Také umožňují manipulaci s osami a legendou. Pomocí ggplot2 můžete generovat grafy, aniž byste věděli, jak škály/měřítka fungují, ale vyplatí se je znát. Existuje totiž mnoho možností, jak graf pomocí škál vylepšit. V tomto článku jsou zmíněné alespoň některé základní, ostatní lze dohledat v různých dokumentacích.
Při práci s osami spojitých proměnných se často používají polohové měřítka +scale_x_continuous(), +scale_y_continuous(), umožňující změnit výchozí nastavení jednotlivých os. To je běžný úkol, když potřebujete zajistit, aby měřítka v různých grafech byla vzájemně konzistentní. Existuje několik dalších měřítek pro spojité proměnné například +scale_x_log10(), +scale_x_reverse(), +scale_x_sqrt() atd., z nichž většina se používá k zajištění snadného přístupu k běžným transformacím. Podobně se při manipulaci s osami diskrétních proměnných používají například +scale_x_discrete() a +scale_y_discrete().
Balík ggplot2 poskytuje různé barevné škály, kterými můžete původní nastavení rychle podle svých představ změnit. Barevné škály byly navrženy pro diskrétní proměnné +scale_colour_brewer(), spojité proměnné +scale_colour_distiller(), +scale_colour_gradient(), +scale_colour_gradient2() i proměnné kategorizované +scale_colour_fermenter(). Pokud máte v úmyslu vytisknout diskrétní barevnou škálu černobíle, je lepší použít +scale_colour_grey(), která mapuje diskrétní data na stupně šedi, od světlé po tmavou. Pokud žádná z již existujících palet nevyhovuje nebo pokud máte své vlastní preferované barvy, můžete je nastavit ručně pomocí +scale_colour_manual(). Také si můžete doinstalovat i další balíčky obsahující palety s různými barevnými škálami jako je například paletteer.
Kromě výše uvedených měřítek se využívají i meřítka velikosti +scale_size(), meřítka tvaru +scale_shape i typu čár +scale_linetype().
Vytvoření atraktivního vzhledu grafu lze i pomoci různých předdefinovaných motivů (theme), které můžou být užitečné pro rychlou změnu vzhledu vaší vizualizace. Vzhled grafu můžete změnit výběrem z témat: +theme_bw(), +theme_dark(), +theme_light(), +theme_minimal(), atd. Kromě jiného můžete nastavení motivu, legendy, názvů, atd. měnit přímo přidáním +theme() a v rámci této funkce pomocí argumentů definovat, co má být změněno.
Balík ggplot2 umožňuje konstruovat jenom dvoudimenzionální grafy. To, jak budou vypadat dvě osy grafu nám řídí systém souřadnic (coord). V současné verzi je k dispozici několik možností. Nejznámějším a nejběžnějším typem je karteziánský souřadnicový systém +coord_cartesian(), který je výchozím nastavením při tvorbě grafu. K záměně osy x a y možno použít +coord_flip(). V případě, že potřebujete jednotky na osách zajistit v nějakém poměru, můžete využít +coord_fixed(). Pro tvorbu map se používá +coord_map() a při tvorbě koláčových grafů +coord_polar().
Graf můžete také rozdělit do několika menších podgrafů, což zabezpečuje technika zvaná faceting. Proces dělení grafu je běžný například při porovnávání různých skupin dat a hledání nějakých společných vlastností. V takovém případě jsou k dispozici dva základní typy dělení grafů, a to +facet_grid() a +facet_wrap().
I když samotný balík ggplot2 nabízí konstrukci různých grafů, je možné si doinstalovat i doplňkové balíčky, které přinášejí ještě více vizualizačních možností (např. ggridges, ggboxplot, ggcorplot, …).
Je také důležité poznamenat, že ggplot2 nepopisuje interaktivní grafiku, pouze statickou. Není v podstatě žádný rozdíl mezi zobrazením grafů ggplot2 na obrazovce počítače a jejich tiskem na papír, což pochopitelně nevadí v různých vědeckých publikacích, ovšem při tvorbě interaktivních grafů dostupných online budete muset řešit tuto problematiku jinak.
Tip pro exportování
Pokud chcete, aby byla při exportování zachovaná kvalita obrázků, doporučujeme např. funkci ggsave() a pomocí argumentu device zadat formát vektorové grafiky „svg“ (viz následující příkaz):
Na závěr ještě poskytujeme ukázku grafů konstruovaných skládáním jednotlivých komponent:
V dalším článku se zaměříme na balík dplyr, který je k dispozici pro manipulaci s daty. Balík dplyr budete častokrát potřebovat ještě předtím, než začnete s tvorbou grafů, protože ve většině případů nebudete mít data k analýze připravené dopředu.
Zdroje:
H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2016.
Rádi byste se o statistice a analýze dat dozvěděli více? Chcete se stát mistrem ve svém oboru nebo si jen potřebujete doplnit znalosti? V ACREA nabízíme širokou nabídku kurzů pro váš profesní růst. Máte-li jiný dotaz. Nebojte se využít naši nezávaznou konzultaci, při které vám rádi zodpovíme všechny vaše dotazy a najdeme vhodné řešení.