Hlavní navigace

Tvorba grafů v jazyce R s využitím knihovny ggplot2 (II)

27. 10. 2020
Doba čtení: 25 minut

Sdílet

 Autor: R Core Team
Jedenáctá část seriálu o jazyku R je věnována popisu tvorby grafů s využitím knihovny ggplot2 a konceptu „grammar of graphics“. Vysvětlíme si, jak se grafy postupně skládají aplikací vizuálního mapování na vstupní data.

Obsah

1. Grammar of graphics implementovaná v knihovně ggplot2

2. Konstrukce grafů postupnou aplikací funkcí

3. Specifikace vstupních dat ve funkci ggplot

4. Základní transformace zdrojových dat do vizuálních stylů

5. Vykreslení korelačního diagramu s využitím funkce geom_point()

6. Modifikace vizuálního zobrazení bodů v korelačním diagramu

7. Modifikace většího množství vizuálních parametrů

8. Nastavení konstantních vizuálních stylů, kombinace se styly modifikovanými daty

9. Modifikace vizuálního stylu společně se zobrazením legendy

10. Použití vlastních barev v grafu

11. Šedý podklad u všech bodů v grafu

12. Přidání regresní přímky do korelačního diagramu

13. Zobrazení názvů automobilů

14. Zobrazení průběhů funkcí

15. Alternativní způsob zobrazení průběhu funkce s využitím stat_function

16. Jednoduchý sloupcový graf

17. Změna barev ve sloupcovém grafu

18. Obsah následující části seriálu

19. Repositář s demonstračními příklady

20. Odkazy na Internetu

1. Grammar of graphics implementovaná v knihovně ggplot2

Na desátou část seriálu o programovacím jazyku R, v níž jsme si vysvětlili některé základní funkce knihovny ggplot2, dnes navážeme. Ukážeme si totiž praktické využití některých aspektů „grammar of graphics“, což je způsob konstrukce grafů, v němž se využívá mapování vizuálních stylů na vstupní data. Vykreslení, resp. přesněji řečeno složení grafu, je většinou provedeno v několika krocích:

  1. Inicializace objektu ggplot, většinou se specifikací zdroje dat.
  2. Specifikace „estetického mapování“, což je určení, jakým způsobem se mají zdrojová data transformovat do vizuálních stylů, popř. na geometrii vykreslovaných objektů (lze provést i přímo ve funkciggplot, jak si to ostatně ukážeme v příkladech).
  3. Určení způsobu vykreslení (typ grafu atd.).
  4. Změna grafických (vizuálních) vlastností, například na základě třetí či další veličiny.
  5. Změna souřadného systému (mapování, projekce).
  6. Složení grafu z vrstev, popř. rozdělení na „facets“.

Základní postup konstrukce grafů je ukázán na následujícím obrázku. V tomto případě nejsou vizuální vlastnosti ovlivněny vstupními daty (můžeme je však nastavit jinak – například konstantní barvu vykreslovaných bodů atd.):

Obrázek 1: Princip konstrukce grafů s využitím grammar of graphics.
Autor: Javier Luraschi, https://github.com/javierluraschi

Styl vykreslení, například barva, grafické symboly, velikost atd., je však ovlivnitelný vstupními daty, což je naznačeno na dalším obrázku:

Obrázek 2: Mapování hodnot na vizuální vlastnosti (barva …).
Autor: Javier Luraschi, https://github.com/javierluraschi

A právě naznačenými dvěma způsoby konstrukce grafů se budeme zabývat v navazujících kapitolách.

Poznámka: v předchozích částech tohoto seriálu jsme se mj. zmínili i o možnosti použít vývojová prostředí pro programovací jazyk R dostupná online, tedy bez nutnosti instalace R a R Studia. K již zmíněným prostředím je ještě vhodné přidat online projekt https://rdrr.io/snippets/, který podporuje i práci s grafy poskytovanými standardní knihovnou, knihovnou Lattice a pochopitelně i knihovnou ggplot2. Všechny dnešní demonstrační příklady byly otestovány i v tomto online IDE (i když online IDE pochopitelně v žádném případě nenahradí plnohodnotné R Studio).

2. Konstrukce grafů postupnou aplikací funkcí

V úvodní kapitole jsme si ve stručnosti řekli, jakým způsobem se konstruuje graf ze vstupních dat specifikací mapování, vizuálních stylů, změny souřadného systému atd. Tento způsob konstrukce je přitom plně reflektován i v programovém kódu, protože se graf skutečně skládá aplikací funkcí na výsledek vytvořený předchozí funkcí. Základem je v tomto případě konstruktor ggplot, který vytvoří strukturu reprezentující graf a tuto strukturu můžeme v dalších funkcích postupně modifikovat a přidávat do ní další atributy. Naznačení celého postupu může vypadat následovně:

ggplot(data=) +
       <mapping> +
       <geom-function> +
       <coordinate-function> +
       <facet-function> +
       <scale-function> +
       <theme-function>

3. Specifikace vstupních dat ve funkci ggplot

V této kapitole i v kapitolách navazujících budeme opět používat datový soubor uložený v datovém rámci mtcars, který již známe z předchozích částí tohoto seriálu. Takže jen krátce – jedná se o souhrnné informace o třiceti dvou vozech, přičemž každý řádek datového rámce je pojmenovaný podle typu vozu):

mtcars
 
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

Vstupní data pro nově vznikající graf se specifikují argumentem data při volání funkce ggplot, která zkonstruuje základní strukturu reprezentující graf. Nejjednodušší způsob konstrukce grafu tedy může vypadat takto:

library(ggplot2)
 
ggplot(data=mtcars)

Alternativně je možné zápis nepatrně zkrátit tím, že se neuvede název argumentu – prvním (nepojmenovaným) argumentem funkce ggplot je tedy specifikace vstupních dat:

library(ggplot2)
 
ggplot(mtcars)

Vzhledem k tomu, že jsme pouze určili vstupní data, ovšem již jsme explicitně neřekli, jaké sloupce se mají vykreslit, popř. jaký vizuální styl se má použít, zareaguje knihovna ggplot2 jednoduše – graf sice vykreslí, ale jako pouhou šedou plochu, kterou můžeme považovat za kreslicí plátno (canvas):

Obrázek 3: Prázdná plocha připravená pro nově vykreslovaný graf vytvořená předchozím skriptem.

4. Základní transformace zdrojových dat do vizuálních stylů

Určení transformace zdrojových dat do vizuálních stylů zajišťuje funkce nazvaná aes:

help(aes)
 
aes                  package:ggplot2                   R Documentation
 
Construct aesthetic mappings
 
Description:
 
     Aesthetic mappings describe how variables in the data are mapped
     to visual properties (aesthetics) of geoms. Aesthetic mappings can
     be set in 'ggplot2()' and in individual layers.

Způsob jejího použití přímo v konstruktoru ggplot může vypadat následovně – ve funkci aes specifikujeme, jaké hodnoty budou použity pro x-ové souřadnice a jaké pro y-ové souřadnice ve výsledném grafu (přitom ale prozatím neříkáme, o jaký graf se má jednat):

library(ggplot2)
     
ggplot(mtcars, aes(x = mpg, y = wt))

Funkci aes ovšem můžeme volat i samostatně (což má ovšem sémanticky poněkud odlišný význam popsaný příště):

library(ggplot2)
 
ggplot(mtcars) + aes(x = mpg, y = wt)

Výsledkem bude v tomto případě odlišný obrázek, který již kromě šedé plochy bude obsahovat i souřadné osy se správným rozsahem hodnot:

Obrázek 4: Nyní graf obsahuje i souřadné osy, protože ggplot v tuto chvíli již ví, jaké jsou rozsahy hodnot na nich.

5. Vykreslení korelačního diagramu s využitím funkce geom_point()

Nyní již máme vše připraveno pro vykreslení korelačního diagramu. K tomuto účelu se používá funkce nazvaná geom_point(), která namapuje hodnoty x, y na středy bodů, které se vynesou do diagramu. Máme k dispozici dvě možnosti zápisu. První možnost používá volání aes() uvnitř funkce ggplot:

library(ggplot2)
 
ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point()

Druhá možnost naopak volá aes() samostatně a kombinuje výsledek s výsledkem funkce ggplot:

library(ggplot2)
 
ggplot(mtcars) + aes(x = mpg, y = wt) + geom_point()

Obrázek 5: Korelační diagram vykreslený skripty z této kapitoly.

V dalších příkladech použijeme jiný zápis, kdy bude volání dalších funkcí uvedeno na samostatných řádcích:

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt) +
       geom_point()
Poznámka: znak pro součet v tomto případě musí být uveden na koncích řádků, nikoli na začátcích dalších řádků.

6. Modifikace vizuálního zobrazení bodů v korelačním diagramu

Podobně jako u funkce qplot popsané minule i konstrukce diagramů funkcí ggplot umožňuje modifikaci vizuálního zobrazení bodů v jakémkoli diagramu, včetně diagramu korelačního. Podívejme se na jednu z variant, kdy je barva bodů modifikována obsahem sloupce (v datovém rámci) s počtem válců:

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt) +
       geom_point(col=mtcars$cyl)

Výsledek:

Obrázek 6: Modifikace barev vykreslovaných bodů podle počtu válců motoru automobilu.

Podobným způsobem lze změnit velikost vykreslovaných bodů, například na základě počtu rychlostních stupňů:

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt) +
       geom_point(size=mtcars$gear)

Obrázek 7: Modifikace velikosti vykreslovaných bodů podle počtu rychlostních stupňů automobilu.

Změna tvaru bodů:

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt) +
       geom_point(shape=mtcars$cyl)

Obrázek 8: Modifikace tvaru vykreslovaných bodů podle počtu válců v motoru.

Poznámka: ve skutečnosti existuje ještě jeden způsob ovlivnění vizuálních stylů; ten je specifikován přímo ve funkci aes. Tento druhý způsob bude popsán v deváté kapitole.

7. Modifikace většího množství vizuálních parametrů

Modifikovat je pochopitelně možné současně i větší množství vizuálních parametrů, což je ukázáno na dalším demonstračním příkladu, který je vlastně kombinací obou příkladů předchozích:

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt) +
       geom_point(color=mtcars$cyl, size=mtcars$gear)

Obrázek 9: Současná modifikace barev i velikostí vykreslovaných bodů podle počtu rychlostních stupňů automobilu a podle počtu válců v motoru.

Změna barvy a tvaru vykreslovaných bodů se provede následovně:

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt) +
       geom_point(shape=mtcars$cyl, color=mtcars$gear)

Obrázek 10: Současná modifikace barev i tvarů vykreslovaných bodů podle počtu rychlostních stupňů automobilu a podle počtu válců v motoru.

8. Nastavení konstantních vizuálních stylů, kombinace se styly modifikovanými daty

Vizuální styly mohou být nastaveny na konstantní hodnotu platnou pro všechny vykreslované body, například takto:

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt) +
       geom_point(color="red", size=5)

Tentokrát s tímto výsledkem:

Obrázek 11: Změna barvy a velikosti všech vykreslených bodů na stejnou hodnotu.

Pochopitelně je umožněno, aby některé styly byly neměnné a jiné modifikovatelné podle hodnot získaných ze vstupních dat:

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt) +
       geom_point(shape=mtcars$cyl, color="red", size=5)

S výsledkem:

Obrázek 12: Změna barvy a velikosti všech vykreslených bodů na stejnou hodnotu, mění se pouze tvar bodů.

9. Modifikace vizuálního stylu společně se zobrazením legendy

Existuje ještě jeden způsob, jakým můžeme dosáhnout modifikace vizuálního stylu zobrazení bodů v grafu. Můžeme totiž použít další (nepovinné) parametry předávané funkci aes, což má dva důsledky:

  1. Specifikuje se pouze jméno sloupce v datovém rámci, nikoli plné jméno (i s datovým rámcem)
  2. Automaticky se zobrazí legenda vysvětlující daný vizuální styl (resp. jaké hodnoty vizuální styl ovlivní)

Podívejme se nyní na jednoduchý příklad, v němž budeme barvu odvozovat od počtu válců. Aby se použily skutečně jen „diskrétní“ hodnoty, použijeme funkci factor pro převedení počtu válců na faktory:

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt, color=factor(cyl)) +
       geom_point(size=3)

Výsledek je zobrazen na třináctém obrázku:

Obrázek 13: Modifikace barev vykreslovaných bodů podle počtu válců motoru automobilu společně se zobrazením legendy.

Měnit lze (současně) i více vizuálních stylů, například velikost vykreslených bodů:

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt, color=factor(cyl), size=factor(gear)) +
       geom_point()

Obrázek 14: Modifikace barev vykreslovaných bodů podle počtu válců motoru automobilu společně se zobrazením legendy; navíc se velikostí bodů zvýrazňuje počet rychlostních stupňů.

10. Použití vlastních barev v grafu

V některých situacích nám nemusí vyhovovat ty barvy, které jsou automaticky vybrány knihovnou ggplot2 pro zobrazení třetí/čtvrté atd. veličiny v korelačním diagramu. Barvy si pochopitelně můžeme nastavit vlastní, a to (v tomto případě) s využitím funkce nazvané scale_color_manual, které se předá vektor s barvovou paletou. Jednotlivé barvy jsou pojmenovány, popř. lze použít dnes již klasický systém s trojicí hexadecimálně zapsaných hodnot barvových složek:

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt, color=factor(cyl), size=factor(gear)) +
       geom_point() +
       scale_color_manual(values = c("4" = "red", "6" = "darkblue", "8" = "darkgreen"))
Poznámka: počet barev musí odpovídat počtu faktorů s počtem válců motoru. Povšimněte si, že se mapují přímo hodnoty faktorů na barvy.

Výsledek by měl vypadat následovně:

Obrázek 15: Použití vlastních barev pro zvýraznění počtu válců motoru.

11. Šedý podklad u všech bodů v grafu

Při konstrukci grafu nejsme omezeni pouze na jedinou sadu dat, popř. na jediný způsob vykreslení vstupních dat. V dalším příkladu je ukázáno, jakým způsobem je možné vykreslit všechny body v korelačním diagramu dvakrát – jednou s využitím šedé barvy a velkých bodů, podruhé pak již jako barevně zvýrazněné body. Knihovna ggplot2 dodrží nastavené pořadí vykreslování – nejdříve velké šedé body, posléze body menší, ale barevně zvýrazněné:

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt, color=factor(cyl), size=factor(gear)) +
       geom_point(color="gray", size=9) +
       geom_point() +
       scale_color_manual(values = c("4" = "red", "6" = "darkblue", "8" = "darkgreen"))

Obrázek 16: Šedý podklad u všech bodů v grafu.

12. Přidání regresní přímky do korelačního diagramu

Do korelačního diagramu můžeme přidat i regresní přímku. K tomuto účelu se používá funkce pojmenovaná geom_smooth, které se předá typ regresního modelu (lm funkce pro linear model):

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt) +
       geom_point(size = 5) +
       geom_smooth(method = "lm")
Poznámka: povšimněte si, že jsme postupovali stejně, jako v příkladu předchozím – do konstruovaného grafu byl přidán další příkaz pro vykreslení grafických entit.

Obrázek 17: Regresní přímka přidaná do korelačního grafu.

13. Zobrazení názvů automobilů

Prozatím umíme do grafu přidat následující entity:

  • Jednotlivé body s využitím geom_point
  • Regresní přímku pomocí geom_smooth zmíněnou v předchozí kapitole

Často se setkáme s nutností přidat do grafu popisky jednotlivých hodnot. To je samozřejmě možné a slouží k tomu funkce nazvaná geom_label, které lze předat (přes aes, jak již víme) jména zobrazená u jednotlivých bodů. V případě, že se má jednat o jména automobilů, musíme je získat přímo z názvů řádků v datovém rámci (tato jména nejsou uložena v samostatném sloupci), takže musíme použít row.names(mtcars). Celý kód příkladu bude vypadat následovně:

library(ggplot2)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt) +
       geom_point(size = 5) +
       geom_label(aes(label=row.names(mtcars)))

Obrázek 18: Zobrazení názvů automobilů v grafu.

Poznámka: v případě, že vám tento způsob nepřipadá čitelný, můžete si pochopitelně jména automobilů uložit do zvláštního vektoru ještě před konstrukcí grafu:
library(ggplot2)
 
car.names <- row.names(mtcars)
 
ggplot(data=mtcars) +
       aes(x = mpg, y = wt) +
       geom_point(size = 5) +
       geom_label(aes(label=car.names))

14. Zobrazení průběhů funkcí

Poměrně často se setkáme s požadavkem na zobrazení průběhů funkcí, přesněji řečeno funkcí zapsaných explicitně formou y=f(x). Existuje několik způsobů, jak tohoto požadavku dosáhnout a jedna z možností spočívá ve vytvoření vektoru s x-ovými hodnotami, dalšího vektoru s hodnotami y-ovými a konstrukcí pomocného datového rámce. Vše je ukázáno na dalším demonstračním příkladu:

library(ggplot2)
 
x < 1:200
f < x/2
y < sin(f)/f
 
df < data.frame(x)
 
ggplot(data = df) +
       aes(x=x, y=y) +
       geom_point()

Obrázek 19: Průběh funkce zobrazený nespojitě – jednotlivými body.

Výhodnější bude zobrazení průběhu funkce formou pospojovaných úseček:

library(ggplot2)
 
x < 1:200
f < x/2
y < sin(f)/f
 
df < data.frame(x)
 
ggplot(data = df) +
       aes(x=x, y=y) +
       geom_line()

S tímto výsledkem:

Obrázek 20: Průběh funkce zobrazený pospojovanými úsečkami (polyčárou).

Podívejme se ještě, jakým způsobem se knihovna ggplot2 vypořádá s funkcí, která je nespojitá a současně nemá v bodě x=0 limitu:

library(ggplot2)
 
x < -100:100
y < 1/x
 
df < data.frame(x)
 
ggplot(data = df) +
       aes(x=x, y=y) +
       geom_line()

Obrázek 21: Zobrazení funkce y=1/x, a to včetně bodu, pro nějž neexistuje limita.

15. Alternativní způsob zobrazení průběhu funkce s využitím stat_function

Existuje i několik dalších způsobů zobrazení průběhu funkce. Namísto geom_point nebo geom_line lze alternativně použít i volání stat_function s tím, že se této funkci přímo předá funkce, která se má vykreslit (viz zvýrazněná část zdrojového kódu):

library(ggplot2)
 
x < 1:10
 
df < data.frame(x)
 
ggplot(data = df) +
       aes(x) +
       stat_function(fun=function(x) 1/x)
Poznámka: tímto způsobem práce s funkcemi se budeme podrobněji zabývat příště.

Obrázek 22: Alternativní způsob zobrazení průběhu funkce.

16. Jednoduchý sloupcový graf

Zavoláním funkce geom_bar můžeme do grafu vykreslit sloupcový graf tak, jak je to ukázáno v dalším demonstračním příkladu:

library(ggplot2)
 
x < seq(1, nrow(mtcars))
 
ggplot(data=mtcars) +
       aes(x = x, y = wt) +
       geom_bar(stat="identity")

Obrázek 23: Vykreslení jednoduchého sloupcového grafu.

Vynutit si můžeme vykreslení každého sloupce odlišnou barvou, a to použitím pojmenovaného parametru fill předaného funkci aes (samozřejmě nejsme omezeni jen na hodnoty vektoru x):

library(ggplot2)
 
x < seq(1, nrow(mtcars))
 
ggplot(data=mtcars) +
       aes(x = x, y = wt, fill=x) +
       geom_bar(stat="identity")

Obrázek 24: Jednoduchý sloupcový graf, jehož každý sloupec je vyplněn jinou barvou.

17. Změna barev ve sloupcovém grafu

Předchozí demonstrační příklad byl schválně vytvořen takovým způsobem, aby se každý sloupec zobrazil odlišnou barvou. Umožňuje nám to totiž vyzkoušet si použití odlišných barvových palet, resp. přesněji řečeno palet vytvořených gradientními přechody mezi několika specifikovanými barvami.

Specifikace palety složené z přechodů mezi barvami duhy:

library(ggplot2)
 
x < seq(1, nrow(mtcars))
 
ggplot(data=mtcars) +
       aes(x = x, y = wt, fill=x) +
       geom_bar(stat="identity") +
       scale_fill_gradientn(colours=rainbow(4))

Obrázek 25: Barvová paleta složená z přechodů mezi barvami duhy.

Další barvová paleta se jmenuje „heat“, protože se používá v takzvaných „heat mapách“:

library(ggplot2)
 
x < seq(1, nrow(mtcars))
 
ggplot(data=mtcars) +
       aes(x = x, y = wt, fill=x) +
       geom_bar(stat="identity") +
       scale_fill_gradientn(colours=heat.colors(4))

Obrázek 26: Barvová paleta „heat“.

Třetí barvová paleta je použita při zobrazování terénu:

library(ggplot2)
 
x < seq(1, nrow(mtcars))
 
ggplot(data=mtcars) +
       aes(x = x, y = wt, fill=x) +
       geom_bar(stat="identity") +
       scale_fill_gradientn(colours=terrain.colors(4))

Obrázek 27: Barvová paleta „terrain“.

A konečně barvová paleta „topo“:

library(ggplot2)
 
x < seq(1, nrow(mtcars))
 
ggplot(data=mtcars) +
       aes(x = x, y = wt, fill=x) +
       geom_bar(stat="identity") +
       scale_fill_gradientn(colours=topo.colors(4))

Obrázek 28: Barvová paleta „topo“.

Root Docker

Poznámka: nenechte se zmýlit tím, že se někdy používá slovo/parametr color a jindy colour. Knihovna ggplot2 se snaží o porozumění oběma těmto slovům.

18. Obsah následující části seriálu

V navazující části seriálu o programovacím jazyku R budou popsány složitější typy grafů (protože korelační diagramy jsou prakticky nejjednodušším typem grafu vůbec).

19. Repositář s demonstračními příklady

Zdrojové kódy všech dnes použitých demonstračních příkladů byly uloženy do nového Git repositáře, který je dostupný na adrese https://github.com/tisnik/r-examples V případě, že z nějakého důvodu nebudete chtít klonovat celý repositář (ten je ovšem – alespoň prozatím – velmi malý, dnes má stále jen jednotky kilobajtů), můžete namísto toho použít odkazy na jednotlivé demonstrační příklady, které naleznete v následující tabulce:

# Demonstrační příklad Stručný popis demonstračního příkladu Cesta
1 01_data_specification.R specifikace zdroje dat pro konstrukci grafu funkcí ggplot https://github.com/tisnik/r-examples/blob/master/11-ggplot2/01_data_specification.R
2 02_shorter_data_specification.R kratší zápis specifikace zdroje dat pro konstrukci grafu funkcí ggplot https://github.com/tisnik/r-examples/blob/master/11-ggplot2/02_shorter_data_spe­cification.R
3 03_aesthetic_as_parameter.R základní transformace zdrojových dat do vizuálních stylů https://github.com/tisnik/r-examples/blob/master/11-ggplot2/03_aesthetic_as_parameter.R
4 04_aesthetic_as_function.R základní transformace zdrojových dat do vizuálních stylů, alternativní způsob zápisu https://github.com/tisnik/r-examples/blob/master/11-ggplot2/04_aesthetic_as_function.R
5 05_geoms_point.R vykreslení korelačního diagramu https://github.com/tisnik/r-examples/blob/master/11-ggplot2/05_geoms_point.R
6 06_geoms_point_variant_B.R vykreslení korelačního diagramu, alternativní způsob zápisu https://github.com/tisnik/r-examples/blob/master/11-ggplot2/06_geoms_point_variant_B.R
7 07_geoms_point_variant_C.R korelační diagram, vylepšený zápis https://github.com/tisnik/r-examples/blob/master/11-ggplot2/07_geoms_point_variant_C.R
8 08_colors.R modifikace barev vykreslovaných bodů podle počtu válců motoru automobilu https://github.com/tisnik/r-examples/blob/master/11-ggplot2/08_colors.R
9 09_sizes.R modifikace velikosti vykreslovaných bodů podle počtu rychlostních stupňů automobilu https://github.com/tisnik/r-examples/blob/master/11-ggplot2/09_sizes.R
10 10_colors_and_sizes.R kombinace změny barev i velikosti vykreslovaných bodů https://github.com/tisnik/r-examples/blob/master/11-ggplot2/10_colors_and_sizes.R
11 11_shape.R modifikace tvaru vykreslovaných bodů podle počtu válců v motoru https://github.com/tisnik/r-examples/blob/master/11-ggplot2/11_shape.R
12 12_shape_and_color.R současná modifikace barev i tvarů vykreslovaných bodů podle počtu rychlostních stupňů automobilu a podle počtu válců v motoru https://github.com/tisnik/r-examples/blob/master/11-ggplot2/12_shape_and_color.R
13 13_fixed_size_color_default_shape.R změna barvy a velikosti všech vykreslených bodů na stejnou hodnotu https://github.com/tisnik/r-examples/blob/master/11-ggplot2/13_fixed_size_color_de­fault_shape.R
14 14_fixed_size_color_modified_shape.R změna barvy a velikosti všech vykreslených bodů na stejnou hodnotu, mění se pouze tvar bodů https://github.com/tisnik/r-examples/blob/master/11-ggplot2/14_fixed_size_color_mo­dified_shape.R
15 15_color_and_legend.R modifikace barev vykreslovaných bodů podle počtu válců motoru automobilu společně se zobrazením legendy https://github.com/tisnik/r-examples/blob/master/11-ggplot2/15_color_and_legend.R
16 16_color_size_and_legend.R modifikace barev vykreslovaných bodů podle počtu válců motoru automobilu společně se zobrazením legendy; navíc se velikostí bodů zvýrazňuje počet rychlostních stupňů https://github.com/tisnik/r-examples/blob/master/11-ggplot2/16_color_size_and_legend.R
17 17_scale_color_manual.R použití vlastních barev pro zvýraznění počtu válců motoru https://github.com/tisnik/r-examples/blob/master/11-ggplot2/17_scale_color_manual.R
18 18_gray_background.R šedý podklad u všech bodů v grafu https://github.com/tisnik/r-examples/blob/master/11-ggplot2/18_gray_background.R
19 19_geom_smooth.R proložení bodů křivkou https://github.com/tisnik/r-examples/blob/master/11-ggplot2/19_geom_smooth.R
20 20_row_names.R zobrazení jmen automobilů přímo v grafu https://github.com/tisnik/r-examples/blob/master/11-ggplot2/20_row_names.R
21 21_stat_function.R jeden ze způsobů zobrazení průběhu funkce https://github.com/tisnik/r-examples/blob/master/11-ggplot2/21_stat_function.R
22 22_function_drawn_as_points.R zobrazení průběhu funkce pomocí jednotlivých bodů https://github.com/tisnik/r-examples/blob/master/11-ggplot2/22_function_drawn_as_points.R
23 23_function_drawn_by_lines.R zobrazení průběhu funkce pomocí propojení úsečkami https://github.com/tisnik/r-examples/blob/master/11-ggplot2/23_function_drawn_by_lines.R
24 24_function1_over_x.R ukázka způsobu zobrazení nespojité funkce https://github.com/tisnik/r-examples/blob/master/11-ggplot2/24_function1_over_x.R
25 25_bar_chart.R vykreslení jednoduchého sloupcového diagramu s výchozí barvou sloupců https://github.com/tisnik/r-examples/blob/master/11-ggplot2/25_bar_chart.R
26 26_bar_chart_color.R vykreslení jednoduchého sloupcového diagramu s modifikovanou barvou sloupců https://github.com/tisnik/r-examples/blob/master/11-ggplot2/26_bar_chart_color.R
27 27_bar_chart_rainbow.R specifikace použité barvové palety při vykreslování sloupcového grafu https://github.com/tisnik/r-examples/blob/master/11-ggplot2/27_bar_chart_rainbow.R
28 28_bar_chart_heat_colors.R specifikace použité barvové palety při vykreslování sloupcového grafu https://github.com/tisnik/r-examples/blob/master/11-ggplot2/28_bar_chart_heat_colors.R
29 29_bar_chart_terrain_colors.R specifikace použité barvové palety při vykreslování sloupcového grafu https://github.com/tisnik/r-examples/blob/master/11-ggplot2/29_bar_chart_terrain_colors.R
30 30_bar_chart_topo_colors.R specifikace použité barvové palety při vykreslování sloupcového grafu https://github.com/tisnik/r-examples/blob/master/11-ggplot2/30_bar_chart_topo_colors.R

20. Odkazy na Internetu

  1. Data visualization in R: cheat sheet
    https://github.com/rstudi­o/cheatsheets/blob/master/da­ta-visualization-2.1.pdf
  2. The R Project for Statistical Computing
    https://www.r-project.org/
  3. An Introduction to R
    https://cran.r-project.org/doc/manuals/r-release/R-intro.pdf
  4. R (programming language)
    https://en.wikipedia.org/wi­ki/R_(programming_language)
  5. The R Programming Language
    https://www.tiobe.com/tiobe-index/r/
  6. R Graphics Second Edition
    https://www.stat.auckland­.ac.nz/~paul/RG2e/
  7. ggplot2 – Introduction
    https://www.tutorialspoin­t.com/ggplot2/ggplot2_intro­duction.htm
  8. ggplot2: Elegant Graphics for Data Analysis
    https://ggplot2-book.org/index.html
  9. Create Elegant Data Visualisations Using the Grammar of Graphics
    https://www.rdocumentation­.org/packages/ggplot2/ver­sions/3.3.2
  10. Grid
    https://www.stat.auckland­.ac.nz/~paul/grid/grid.html
  11. Interactive Course: Data Visualization with lattice in R
    https://www.datacamp.com/courses/data-visualization-in-r-with-lattice
  12. Lattice: trellis graphics for R
    https://lattice.r-forge.r-project.org/
  13. Lattice: Multivariate Data Visualization with R
    http://lmdvr.r-forge.r-project.org/figures/figures.html
  14. Getting Started with Lattice Graphics
    https://lattice.r-forge.r-project.org/Vignettes/src/lattice-intro/lattice-intro.pdf
  15. Using lattice’s xyplot()
    https://homerhanumat.github­.io/tigerstats/xyplot.html
  16. ggplot2 Tutorial
    https://www.tutorialspoin­t.com/ggplot2/index.htm
  17. Lattice Package in R with Functions and Graphs
    https://techvidvan.com/tu­torials/lattice-package-in-r/
  18. The R Graph Gallery
    https://www.r-graph-gallery.com/index.html
  19. Lattice Graphs
    https://www.statmethods.net/ad­vgraphs/trellis.html
  20. ggplot2 (Graph gallery)
    https://www.r-graph-gallery.com/ggplot2-package.html
  21. R Markdown
    https://rmarkdown.rstudio.com/
  22. R Markdown: The Definitive Guide
    https://bookdown.org/yihui/rmarkdown/
  23. R Markdown Cheat Sheet
    https://rstudio.com/wp-content/uploads/2016/03/rmarkdown-cheatsheet-2.0.pdf
  24. Introduction to R Markdown
    https://rmarkdown.rstudio­.com/articles_intro.html
  25. R Cheat Sheets
    https://blog.sergiouri.be/2016/07/r-cheat-sheets.html
  26. R Cheat Sheet
    https://s3.amazonaws.com/quandl-static-content/Documents/Quandl±+R+Che­at+Sheet.pdf
  27. Base R Cheat Sheet
    https://rstudio.com/wp-content/uploads/2016/06/r-cheat-sheet.pdf
  28. PYPL PopularitY of Programming Language
    https://pypl.github.io/PYPL.html
  29. Tiobe index
    https://www.tiobe.com/tiobe-index/
  30. Stack Overflow: Most Loved, Dreaded & Wanted Programming Languages In 2020
    https://fossbytes.com/stack-overflow-most-loved-dreaded-wanted-programming-languages-in-2020/
  31. How to Install and Use R on Ubuntu
    https://itsfoss.com/install-r-ubuntu/
  32. R programming for beginners – Why you should use R
    https://www.youtube.com/wat­ch?v=9kYUGMg_14s
  33. GOTO 2012 • The R Language The Good The Bad & The Ugly
    https://www.youtube.com/wat­ch?v=6S9r_YbqHy8
  34. Intro to Data Visualization with R & ggplot2
    https://www.youtube.com/wat­ch?v=49fADBfcDD4
  35. Plotting with ggplot2: Part 1
    https://www.youtube.com/wat­ch?v=HeqHMM4ziXA
  36. Plotting with ggplot2: Part 2
    https://www.youtube.com/wat­ch?v=n8kYa9vu1l8
  37. R vs Python – What should I learn in 2020? | R and Python Comparison
    https://www.youtube.com/wat­ch?v=eRP_J2yLjSU
  38. R Programming 101
    https://www.youtube.com/c/rpro­gramming101
  39. Seriál Tvorba grafů pomocí programu „R“
    https://www.root.cz/serialy/tvorba-grafu-pomoci-programu-r/
  40. Tvorba grafů pomocí programu „R“: úvod
    https://www.root.cz/clanky/tvorba-grafu-pomoci-programu-r-1/
  41. Tvorba grafů pomocí programu „R“: pokročilé funkce
    https://www.root.cz/clanky/tvorba-grafu-pomoci-programu-r-pokrocile-funkce/
  42. Tvorba grafů pomocí programu „R“: vkládání textu, čeština
    https://www.root.cz/clanky/grafy-pomoci-programu-r-vkladani-textu-cestina/
  43. Cesta erka: Krok nultý – instalace & nastavení – prostředí, projekty, package
    https://www.jla-data.net/r4su/r4su-environment-setup/
  44. Cesta erka: Krok první – operace a struktury – proměnné, rovnítka a dolary
    https://www.jla-data.net/r4su/r4su-data-structures/
  45. Cesta erka: Krok druhý – načtení externích dat – csvčka, excely a databáze
    https://www.jla-data.net/r4su/r4su-read-data/
  46. Cesta erka: Krok třetí – manipulace s daty – dplyr, slovesa a pajpy
    https://www.jla-data.net/r4su/r4su-manipulate-data/
  47. Cesta erka: Krok čtvrtý – podání výsledků – ggplot, geomy a estetiky
    https://www.jla-data.net/r4su/r4su-report-results/
  48. Cesta erka: Krok pátý – case study – případ piva v Praze
    https://www.jla-data.net/r4su/r4su-case-study-beer/
  49. V indexu popularity programovacích jazyků TIOBE překvapilo R, Go, Perl, Scratch a Rust
    https://www.root.cz/zpravicky/v-indexu-popularity-programovacich-jazyku-tiobe-prekvapilo-r-go-perl-scratch-a-rust/
  50. Is R Programming SURGING in Popularity in 2020?
    https://www.youtube.com/watch?v=Duwn-vImyXE
  51. Using the R programming language in Jupyter Notebook
    https://docs.anaconda.com/a­naconda/navigator/tutorial­s/r-lang/
  52. Using R on Jupyter Notebook
    https://dzone.com/articles/using-r-on-jupyternbspnotebook
  53. Graphics, ggplot2
    http://r4stats.com/examples/graphics-ggplot2/
  54. A Practice Data Set
    https://r4stats.wordpress­.com/examples/mydata/
  55. Shiny – galerie projektů
    https://shiny.rstudio.com/gallery/
  56. Seriál Programovací jazyk Julia
    https://www.root.cz/seria­ly/programovaci-jazyk-julia/
  57. Julia (front page)
    http://julialang.org/
  58. Julia – repositář na GitHubu
    https://github.com/JuliaLang/julia
  59. Julia (programming language)
    https://en.wikipedia.org/wi­ki/Julia_%28programming_lan­guage%29
  60. IJulia
    https://github.com/JuliaLan­g/IJulia.jl
  61. Introducing Julia
    https://en.wikibooks.org/wi­ki/Introducing_Julia
  62. Julia: the REPL
    https://en.wikibooks.org/wi­ki/Introducing_Julia/The_REPL
  63. Introducing Julia/Metaprogramming
    https://en.wikibooks.org/wi­ki/Introducing_Julia/Meta­programming
  64. Month of Julia
    https://github.com/DataWo­okie/MonthOfJulia
  65. Learn X in Y minutes (where X=Julia)
    https://learnxinyminutes.com/doc­s/julia/
  66. New Julia language seeks to be the C for scientists
    http://www.infoworld.com/ar­ticle/2616709/application-development/new-julia-language-seeks-to-be-the-c-for-scientists.html
  67. Julia: A Fast Dynamic Language for Technical Computing
    http://karpinski.org/publi­cations/2012/julia-a-fast-dynamic-language
  68. The LLVM Compiler Infrastructure
    http://llvm.org/
  69. Julia: benchmarks
    http://julialang.org/benchmarks/
  70. R Vector
    https://www.datamentor.io/r-programming/vector/
  71. .R File Extension
    https://fileinfo.com/extension/r
  72. Lineární regrese
    https://cs.wikipedia.org/wi­ki/Line%C3%A1rn%C3%AD_regre­se
  73. lm (funkce)
    https://www.rdocumentation­.org/packages/stats/versi­ons/3.6.2/topics/lm
  74. quit (funkce)
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/quit
  75. c (funkce)
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/c
  76. help (funkce)
    https://www.rdocumentation­.org/packages/utils/versi­ons/3.6.2/topics/help
  77. Shiny: Introduction to interactive documents
    https://shiny.rstudio.com/ar­ticles/interactive-docs.html
  78. R Release History 1997–2013
    http://timelyportfolio.git­hub.io/rCharts_timeline_r/
  79. R: atomic vectors
    https://renenyffenegger.ch/no­tes/development/languages/R/da­ta-structures/vector/
  80. 11 Best R Programming IDE and editors
    https://www.dunebook.com/best-r-programming-ide/
  81. CRAN – The Comprehensive R Archive Network
    https://cran.r-project.org/
  82. R – Arrays
    https://www.tutorialspoin­t.com/r/r_arrays.htm
  83. Array vs Matrix in R Programming
    https://www.geeksforgeeks.org/array-vs-matrix-in-r-programming/?ref=rp
  84. Online R Language IDE
    https://www.jdoodle.com/execute-r-online/
  85. Execute R Online (R v3.4.1)
    https://www.tutorialspoin­t.com/execute_r_online.php
  86. Snippets: Run any R code you like. There are over twelve thousand R packages preloaded
    https://rdrr.io/snippets/
  87. R Package Documentation
    https://rdrr.io/
  88. Data Reshaping in R – Popular Functions to Organise Data
    https://techvidvan.com/tutorials/data-reshaping-in-r/
  89. What is an R Data Frame?
    https://magoosh.com/data-science/what-is-an-r-data-frame/
  90. What's a data frame?
    https://campus.datacamp.com/cou­rses/free-introduction-to-r/chapter-5-data-frames?ex=1
  91. data.frame
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/data.frame
  92. as.data.frame
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/as.data.fra­me
  93. table
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/table
  94. Python Pandas – DataFrame
    https://www.tutorialspoin­t.com/python_pandas/python_pan­das_dataframe.htm
  95. The Pandas DataFrame: Make Working With Data Delightful
    https://realpython.com/pandas-dataframe/
  96. Python | Pandas DataFrame
    https://www.geeksforgeeks.org/python-pandas-dataframe/
  97. R – Factors
    https://www.tutorialspoin­t.com/r/r_factors.htm
  98. R – Scatterplots
    https://www.tutorialspoin­t.com/r/r_scatterplots.htm
  99. Quick guide to line types (lty) in R
    https://www.benjaminbell.co­.uk/2018/02/quick-guide-to-line-types-lty-in-r.html
  100. Lattice C (Wikipedia)
    https://en.wikipedia.org/wi­ki/Lattice_C
  101. Lorenz Attractor in R
    https://www.sixhat.net/lorenz-attractor-in-r.html
  102. Small multiple
    https://en.wikipedia.org/wi­ki/Small_multiple
  103. Category:Infographics (infografika)
    https://en.wikipedia.org/wi­ki/Category:Infographics
  104. Trellis plots (pro Python)
    https://subscription.packtpub­.com/book/big_data_and_bu­siness_intelligence/9781784390150/4/ch04l­vl1sec41/trellis-plots
  105. Trellis (architecture)
    https://en.wikipedia.org/wi­ki/Trellis_(architecture)
  106. Izobara (meteorologie)
    https://cs.wikipedia.org/wi­ki/Izobara_(meteorologie)
  107. How to Create a Lattice Plot in R
    https://www.dummies.com/pro­gramming/r/how-to-create-a-lattice-plot-in-r/
  108. Density estimation
    https://en.wikipedia.org/wi­ki/Density_estimation
  109. Sedm smrtelných statistických hříchů
    http://dfens-cz.com/sedm-smrtelnych-statistickych-hrichu/
  110. Spurious correlations
    https://tylervigen.com/spurious-correlations

Autor článku

Pavel Tišnovský vystudoval VUT FIT a v současné době pracuje ve společnosti Red Hat, kde vyvíjí nástroje pro OpenShift.io.