Obsah
1. Tvorba grafů v jazyce R s využitím knihovny ggplot2
2. „Grammar of Graphics“ a jazyk R
3. Zrychlené a zjednodušené vykreslení grafů funkcí qplot
4. Vykreslení korelačního diagramu
5. Změna stylu vykreslování na základě další hodnoty (sloupce v datovém rámci)
6. Kombinace většího množství hodnot zakreslovaných do jediného grafu
7. Spojení vykreslených bodů úsečkami
8. Proložení bodů v korelačním diagramu křivkou
9. Volba facets – rozdělení grafů do mřížky na základě vybraných veličin
11. Kombinace změny grafických stylů s volbou facets
12. Vykreslování průběhů funkcí s využitím qplot
14. Jednoduchý krabicový diagram
15. Základy „Grammar of Graphics“ – funkce ggplot
16. Korelační diagram, tentokrát vytvořený pomocí ggplot a geom_point
17. Přidání regresní přímky do korelačního diagramu
18. Kombinace několika stylů vykreslování
19. Repositář s demonstračními příklady
1. Tvorba grafů v jazyce R s využitím knihovny ggplot2
V dnešní části seriálu o programovacím jazyku R se začneme zabývat knihovnou pojmenovanou ggplot2. Už samotná existence této knihovny je pro některé uživatele důvodem k přechodu na jazyk R. Vysvětlíme si – ovšem po relativně malých krocích – jak se v této knihovně vytváří různé typy grafů a zejména jak se určuje způsob mapování dat na „vizuální styl“ použitý v grafech, protože princip práce knihovny ggplot na je postaven právě na těchto konceptech.
Obrázek 1: Logo knihovny ggplot2.
Naposled si v tomto seriálu připomeňme, jaké knihovny pro tvorbu grafů máme v jazyku R k dispozici:
- Nízkoúrovňový přístup
- Funkce ze základní knihovny jazyka R
- Balíček grid
- Vysokoúrovňový přístup
- Balíček lattice
- Balíček ggplot
Pro interaktivní grafy (či obecně grafiku) je možné využít například tyto knihovny:
- Balíček rggobi
- Balíček iplots
- Balíček rgl
Vidíme tedy, že knihovna ggplot2 spadá do stejné kategorie jako již zmíněná knihovna Lattice. Ve skutečnosti je ovšem tvorba grafů značně odlišná, což si ukážeme v závěrečných kapitolách a zejména pak v navazujícím článku.
2. „Grammar of Graphics“ a jazyk R
K tvorbě grafů je možné přistoupit dvěma způsoby. Buď knihovna nabízí několik funkcí, přičemž každá z těchto funkcí je určena pro vykreslení určitého typu grafu. Záleží pak na dokonalosti knihovny, jaké vlastnosti grafu je možné ovlivnit a jak je to složité. Tento způsob může být výhodnější zejména při snaze o rychlé zobrazení „nějakých“ grafů, ovšem navazující úpravy mohou být složité nebo nemožné. Druhý způsob spočívá v tom, že se graf postupně skládá z datových vstupů, mapování těchto vstupů na grafické vlastnosti a popř. i skládání grafů do vrstev či naopak jejich rozdělení do mřížky. Knihovna ggplot2 nabízí oba způsoby, přičemž ten první je reprezentován funkcí gplot/quickplot a druhý je založen na „grammar of graphics“, což je poněkud nadnesený termín označující sémantiku skládání grafů z jednotlivých částí pomocí propojení dat a vlastností.
Konkrétně se jedná o propojení (mapování) mezi daty či metadaty (statistickými informacemi o datech) na straně jedné a vizuálními styly geometrických objektů na straně druhé, přičemž mezi zmíněné geometrické objekty patří zejména body, úsečky a sloupce. Ovlivňovat lze různé vizuální styly, například barvu, tvar, velikost, umístění v rovině či prostoru apod. Dále se využívá vlastnost nazývaná „faceting“, která umožňuje použít stejné styly nastavené uživatelem pro vybrané podmnožiny dat a vytvořit tak grafy rozdělené do několika oblastí, podobně jako tomu bylo v knihovně Lattice (což uvidíme dále na příkladech).
Existuje zde jedno omezení – gramatika nepopisuje interaktivní chování, což pochopitelně nemusí vadit v různých vědeckých publikacích, ovšem při tvorbě „živých“ grafů dostupných online je nutné řešit i tuto problematiku. Tomuto tématu bude věnován samostatný článek.
3. Zrychlené a zjednodušené vykreslení grafů funkcí qplot
Ještě než se zaměříme na způsob vytváření grafů s využitím výše zmíněné „grammar of graphics“, popíšeme si zrychlený a vlastně i do značné míry zjednodušený postup vykreslení grafů funkcí qplot, popř. quickplot. Tato funkce byla do knihovny ggplot2 přidána proto, aby nebylo nutné pro základní grafy používat celou gramatiku, která je sice na jednu stranu velmi mocná, ovšem ne vždy je nutné tuto mocnou technologii použít. Funkce qplot může být pro mnoho účelů více než dostačující, což si ostatně ukážeme na demonstračních příkladech popsaných v navazujících kapitolách.
Podobně jako u dalších funkcí, je k dispozici nápověda i pro funkci qplot; součástí nápovědy jsou i jednoduché příklady použití:
library(ggplot2) help(qplot)
qplot package:ggplot2 R Documentation Quick plot Description: 'qplot' is a shortcut designed to be familiar if you're used to base 'plot()'. It's a convenient wrapper for creating a number of different types of plots using a consistent calling scheme. It's great for allowing you to produce plots quickly, but I highly recommend learning 'ggplot()' as it makes it easier to create complex graphics. Usage: qplot(x, y, ..., data, facets = NULL, margins = FALSE, geom = "auto", xlim = c(NA, NA), ylim = c(NA, NA), log = "", main = NULL, xlab = NULL, ylab = NULL, asp = NA, stat = NULL, position = NULL) quickplot(x, y, ..., data, facets = NULL, margins = FALSE, geom = "auto", xlim = c(NA, NA), ylim = c(NA, NA), log = "", main = NULL, xlab = NULL, ylab = NULL, asp = NA, stat = NULL, position = NULL)
V dalších kapitolách budeme 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
4. Vykreslení korelačního diagramu
Ukažme si nyní naprosto základní způsob využití funkce qplot. V případě, že se této funkci předají dva vektory (sloupce v datovém rámci), bude první vektor považován za soubor x-ových souřadnic a druhý vektor za soubor souřadnic y-ových. Výsledkem tedy bude graf obsahující jednotlivé body – tento graf se nazývá korelační diagram, popř. scatter plot:
library(ggplot2) qplot(wt, mpg, data = mtcars)
Obrázek 2: Korelační diagram vykreslený funkcí qplot. Vykreslené body reprezentují pouze dvojici vlastností (resp. vzájemnou souvislost obou vlastností) – zde konkrétně váhu vozu a jeho spotřebu (ta je ovšem zobrazena inverzně, jak je zvykem v USA).
5. Změna stylu vykreslování na základě další hodnoty (sloupce v datovém rámci)
V mnoha případech potřebujeme do korelačního diagramu nějakým způsobem zanést informace o další vlastnosti (hodnotách). Pokud budeme chtít zachovat přehlednost dvourozměrného grafu, lze další vlastnost zakódovat například do barvy. V tomto případě bude barvou označen počet válců motoru:
library(ggplot2) qplot(wt, mpg, data = mtcars, colour = factor(cyl))
Obrázek 3: Zobrazení třetí vlastnosti – počtu válců – formou barvy. Součástí grafu je i automaticky vytvořená legenda.
Modifikovat je možné i velikost vykreslených bodů, opět (například) v závislosti na počtu válců motoru:
library(ggplot2) qplot(wt, mpg, data = mtcars, size = cyl)
Obrázek 4: Zobrazení třetí vlastnosti – počtu válců – změnou velikosti vykreslovaných bodů. Vzhledem k tomu, že jsme numerické hodnoty nepřevedli na faktory, zobrazují se v legendě i ty hodnoty, které nejsou v datovém setu použity.
Často se taktéž setkáme s tím, že se změní tvar vykreslovaných bodů (ovšem daná vlastnost musí mít jen několik hodnot, jinak bude tento způsob nepřehledný):
library(ggplot2) qplot(mpg, wt, data = mtcars, shape = factor(cyl))
Obrázek 5: Zobrazení třetí vlastnosti – počtu válců – změnou tvaru vykreslovaných bodů.
6. Kombinace většího množství hodnot zakreslovaných do jediného grafu
Nic nám ovšem nebrání v tom, aby se do korelačního diagramu zakódovaly i další vlastnosti, například jak počet válců, tak i počet rychlostí. Jedna z vlastností bude reprezentována velikostí bodů, druhá pak barvou:
library(ggplot2) qplot(wt, mpg, data = mtcars, size = cyl, colour = gear)
Obrázek 6: Zobrazení třetí a čtvrté vlastnosti v korelačním diagramu změnou velikosti a barvy vykreslovaných bodů.
library(ggplot2) qplot(wt, mpg, data = mtcars, size = factor(cyl), colour = factor(gear))
Kombinace velikosti a tvaru bodů:
library(ggplot2) qplot(mpg, wt, data = mtcars, shape = factor(cyl), size = gear)
Obrázek 7: Zobrazení třetí a čtvrté vlastnosti v korelačním diagramu modifikací tvaru a velikosti vykreslovaných bodů.
Kombinace tří vlastností:
library(ggplot2) qplot(mpg, wt, data = mtcars, shape = factor(cyl), size = gear, color = hp)
Obrázek 8: Zobrazení tří dalších vlastností do korelačního diagramu s využitím tvaru, velikosti i barvy vykreslovaných bodů.
7. Spojení vykreslených bodů úsečkami
S využitím pojmenovaného parametru geom můžeme v korelačním diagramu spojit jednotlivé body úsečkami, což by v některých případech mohlo naznačit nějaký trend (resp. přesněji řečeno nějakou korelaci mezi vynášenými hodnotami). U datového setu s automobily je tomu tak pouze do určité míry – trend mezi spotřebou a hmotností obecně existuje, ovšem počet vynášených hodnot je relativně malý:
library(ggplot2) qplot(mpg, wt, data = mtcars, geom = c("point", "line"))
Výsledek bude v našem ne příliš vhodném datovém setu vypadat následovně:
Obrázek 9: Spojení bodů vykreslených v korelačním diagramu úsečkami.
8. Proložení bodů v korelačním diagramu křivkou
Výhodnější může být proložení bodů v korelačním diagramu aproximační křivkou. Navíc se okolo této křivky zobrazí plocha vyjadřující interval spolehlivost. Čím je plocha okolo křivky širší, tím méně (obecně) křivka aproximuje reálná data. V našem konkrétním datovém setu je šířka plochy dosti široká, takže aproximace není (pro tato vstupní data) v žádném případě dokonalá:
library(ggplot2) qplot(mpg, wt, data = mtcars, geom = c("point", "smooth"))
Obrázek 10: Proložení bodů v korelačním diagramu křivkou se zobrazením intervalu spolehlivosti.
Aproximační křivku lze v případě potřeby rozdělit na základě další (třetí) veličiny, v našem případě podle počtu válců motoru. Navíc jsou jednotlivé části křivky odlišeny i barvou:
library(ggplot2) qplot(mpg, wt, data = mtcars, geom = c("point", "smooth"), color = factor(cyl))
Obrázek 11: Rozdělení aproximační křivky na tři části v závislosti na počtu válců motoru.
9. Volba facets – rozdělení grafů do mřížky na základě vybraných veličin
V předchozích dvou částech tohoto seriálu jsme se zaměřili na popis knihovny Lattice, která je taktéž určená pro vykreslování grafů. Název této knihovny je odvozen od toho, že grafy je možné v případě potřeby rozdělit do několika menších grafů umístěných do pravidelné mřížky. Rozdělení je provedeno na základě třetí, popř. čtvrté hodnoty (typicky sloupci v datovém rámci) a může vypadat například následovně:
Podobný koncept nalezneme i v knihovně ggplot2, ovšem namísto označení „lattice“ se zde používá slovo „facet(s)“. Příklady použití v souvislosti s funkcí qplot budou ukázány v navazujících kapitolách.
10. Příklad rozdělení grafu
Pro ilustraci se nyní pokusme rozdělit graf váha vozu/spotřeba na několik částí, přičemž v každé části budou vyneseny údaje o těch automobilech, které mají stejný počet válců a současně i stejný počet rychlostních stupňů. V případě použití funkce qplot je zapotřebí stanovit pojmenovaný parametr facets:
library(ggplot2) qplot(wt, mpg, data = mtcars, facets = cyl ~ gear)
Výsledek by měl vypadat takto:
Obrázek 12: Rozdělení grafu na menší části v závislosti na počtu válců a počtu převodových stupňů.
11. Kombinace změny grafických stylů s volbou facets
Opět nám nic nebrání v tom zanést i do rozdělených grafů informace o další vlastnosti či dalších vlastnostech. Již bez podrobnějšího popisu se podívejme na dvojici demonstračních příkladů.
Rozdělení podle počtu válců a rychlostních stupňů, obarvení na základě páté vlastnosti:
library(ggplot2) qplot(wt, mpg, data = mtcars, facets = cyl ~ gear, colour = factor(carb))
Obrázek 13: Rozdělení podle počtu válců a rychlostních stupňů, obarvení na základě páté vlastnosti.
Přidání šesté vlastnosti (výkon motoru) reprezentované velikostí vykreslených bodů:
library(ggplot2) qplot(wt, mpg, data = mtcars, facets = cyl ~ gear, colour = factor(carb), size = hp)
Obrázek 14: Přidání šesté vlastnosti (výkon motoru) reprezentované velikostí vykreslených bodů.
12. Vykreslování průběhů funkcí s využitím qplot
Díky tomu, že korelační diagram zobrazuje (ve své nejjednodušší podobě) body určené svými souřadnicemi v kartézské souřadné soustavě, je možné relativně snadno vykreslovat i průběhy funkcí. Podívejme se na velmi jednoduchý příklad:
library(ggplot2) x <- 1:50 y <- sin(6*pi*x/100)/x qplot(x, y)
Obrázek 15: Průběh funkce je naznačen body v grafu.
Body, kterými jsme průběh funkce interpolovali, lze spojit úsečkami, což nám dá lepší představu o průběhu funkce:
library(ggplot2) x <- 1:50 y <- sin(6*pi*x/100)/x qplot(x, y, geom = c("point", "line"))
Obrázek 16: Propojení jednotlivých bodů úsečkami.
Na druhou stranu snaha o aproximaci průběhu obecné funkce aproximační křivkou nemusí dopadnout dobře, což je ostatně na dalším příkladu patrné (lepší by v tomto konkrétním případě bylo použít křivku interpolační):
library(ggplot2) x <- 1:50 y <- sin(6*pi*x/100)/x qplot(x, y, geom = c("point", "smooth"))
Obrázek 17: Snaha o aproximaci funkce křivkou, která k tomuto účelu není příliš vhodná.
13. Histogram
V případě, že se namísto dvojice vektorů představujících x-ové a y-ové souřadnice vynášených bodů, předá pouze jediný vektor s numerickými hodnotami, bude namísto korelačního diagramu vykreslen běžný histogram. Funkce qplot tak sama rozhoduje na základě počtu předaných dat, který typ grafu se má vykreslit. Podívejme se tedy například na histogram s výkony motorů z našeho datového setu:
library(ggplot2) qplot(hp, data = mtcars)
Výsledkem bude tento histogram:
Obrázek 18: Histogram vykreslený předchozím demonstračním příkladem.
Šířku intervalů v histogramu určuje nepovinný parametr nazvaný binwidth:
library(ggplot2) qplot(hp, data = mtcars, binwidth=20)
S tímto výsledkem:
Obrázek 19: Histogram s upravenou šířkou intervalů.
14. Jednoduchý krabicový diagram
Posledním typem grafu, který je podporovaný funkcí qplot, je krabicový diagram, s nímž jsme se seznámili již v souvislosti s knihovnou Lattice. Tento graf je nutné explicitně zvolit pojmenovaným parametrem geom, kterému se předává vektor voleb ovlivňujících způsob zobrazení. Příklad použití může vypadat následovně:
library(ggplot2) qplot(factor(cyl), wt, data = mtcars, geom = c("boxplot", "jitter"))
S následujícím výsledkem:
Obrázek 20: Jednoduchý krabicový diagram zobrazený funkcí qplot.
15. Základy „Grammar of Graphics“ – funkce ggplot
Nyní se konečně dostáváme k popisu použití grammar of graphics v knihovně ggplot2. Vykreslení, resp. přesněji řečeno složení grafu je provedeno v několika krocích:
- Inicializace objektu ggplot, většinou se specifikací zdroje dat
- 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ů
- Určení způsobu vykreslení (typ grafu atd.)
- Změna grafických vlastností, například na základě třetí či další veličiny
- Složení grafu z vrstev, popř. rozdělení na „facets“
Základem je konstruktor objektu ggplot, v němž se typicky specifikuje zdroj dat pro nový graf:
help(ggplot) ggplot package:ggplot2 R Documentation Create a new ggplot Description: 'ggplot()' initializes a ggplot object. It can be used to declare the input data frame for a graphic and to specify the set of plot aesthetics intended to be common throughout all subsequent layers unless specifically overridden. Usage: ggplot(data = NULL, mapping = aes(), ..., environment = parent.frame()) Arguments: data: Default dataset to use for plot. If not already a data.frame, will be converted to one by 'fortify()'. If not specified, must be supplied in each layer added to the plot. mapping: Default list of aesthetic mappings to use for plot. If not specified, must be supplied in each layer added to the plot. ...: Other arguments passed on to methods. Not currently used. environment: DEPRECATED. Used prior to tidy evaluation.
Určení transformace zdrojových dat do vizuálních stylů zajišťuje funkce 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 použití:
ggplot(zdrojová_data) + aes(mapování)
Ovšem zápis můžeme i zkrátit na:
ggplot(zdrojová_data) + aes(mapování)
Dnes si ukážeme tvorbu korelačních diagramů, což je však jen jeden z mnoha typů podporovaných grafů. Další typy grafů a způsoby ovlivnění jejich vykreslení budou uvedeny v navazujících částech tohoto seriálu.
16. Korelační diagram, tentokrát vytvořený pomocí ggplot a geom_point
Nyní se můžeme pokusit o vykreslení korelačního diagramu, tentokrát přímo s využitím funkce ggplot a nikoli qplot. Této funkci předáme jak zdroj dat (datový rámec mtcars), tak i specifikaci mapování, zde konkrétně jaký vektor představuje x-ové souřadnice a jaký vektor souřadnice y-ové:
library(ggplot2) ggplot(mtcars, aes(x = mpg, y = wt))
Popř.:
library(ggplot2) ggplot(mtcars) + aes(x = mpg, y = wt)
Pokud tento graf zobrazíme, uvidíme, že se ve skutečnosti vykreslila jen prázdná plocha (ovšem se správně nastavenými rozsahy na souřadných osách). Je tomu tak z toho důvodu, že není specifikováno mapování mezi daty a způsobem jejich zobrazení:
Obrázek 21: Prázdná plocha pro graf.
Musíme tedy nějakým způsobem specifikovat, jakým způsobem se mají data určená pomocí aes zobrazit. Pokud budeme chtít zobrazit korelační diagram (scatter plot), použijeme funkci geom_points:
help(geom_point) geom_point package:ggplot2 R Documentation Points Description: The point geom is used to create scatterplots. The scatterplot is most useful for displaying the relationship between two continuous variables. It can be used to compare one continuous and one categorical variable, or two categorical variables, but a variation like 'geom_jitter()', 'geom_count()', or 'geom_bin2d()' is usually more appropriate. A _bubblechart_ is a scatterplot with a third variable mapped to the size of points. Usage: geom_point(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)
Tuto funkci použijeme následujícím způsobem, aby se graf postupně složil z jednotlivých komponent gramatiky:
library(ggplot2) ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point()
Výsledek by měl vypadat takto:
Obrázek 22: Vykreslení korelačního diagramu.
library(ggplot2) ggplot(mtcars) + aes(x = mpg, y = wt) + geom_point()
17. 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 geom_smooth, které se předá typ regresního modelu (lm funkce pro linear model):
help(geom_smooth) geom_smooth package:ggplot2 R Documentation Smoothed conditional means Description: Aids the eye in seeing patterns in the presence of overplotting. 'geom_smooth()' and 'stat_smooth()' are effectively aliases: they both use the same arguments. Use 'stat_smooth()' if you want to display the results with a non-standard geom. Usage: geom_smooth(mapping = NULL, data = NULL, stat = "smooth", position = "identity", ..., method = "auto", formula = y ~ x, se = TRUE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_smooth(mapping = NULL, data = NULL, geom = "smooth", position = "identity", ..., method = "auto", formula = y ~ x, se = TRUE, n = 80, span = 0.75, fullrange = FALSE, level = 0.95, method.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)
Příklad použití, resp. přesněji řečeno přidání regresní přímky může vypadat následovně:
library(ggplot2) ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point() + geom_smooth(method="lm")
Obrázek 23: Regresní přímka přidaná do korelačního grafu.
18. Kombinace několika stylů vykreslování
U funkce qplot jsme si ukázali, že je možné na základě třetího, popř. i čtvrtého atd. vektoru hodnot zobrazit i další veličiny, a to například s použitím barevných kódů, stylu vykreslení bodů, jejich velikosti atd. Podobný koncept lze pochopitelně využít i v grammar of graphics. Konkrétně musíme specifikovat styl vykreslování bodů přímo ve funkci geom_point, a to následovně:
library(ggplot2) ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point(col=mtcars$cyl) + geom_smooth(method="lm")
Výsledek:
Obrázek 23: Modifikace barvy vykreslovaných bodů na základě počtu válců.
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:
# | Příklad | Stručný popis | Cesta |
---|---|---|---|
1 | 01_qplot_help.R | zobrazí dokumentace k funkci qplot z knihovny ggplot2 | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/01_qplot_help.R |
2 | 02_qplot_xy.R | vykreslení základního korelačního diagramu | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/02_qplot_xy.R |
3 | 03_qplot_colour.R | zobrazení třetí vlastnosti – počtu válců – formou barvy. | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/03_qplot_colour.R |
4 | 04_qplot_size.R | zobrazení třetí vlastnosti – počtu válců – změnou velikosti vykreslovaných bodů. | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/04_qplot_size.R |
5 | 05_qplot_shape.R | zobrazení třetí vlastnosti – počtu válců – změnou tvaru vykreslovaných bodů. | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/05_qplot_shape.R |
6 | 06_qplot_colour_and_size.R | zobrazení třetí a čtvrté vlastnosti v korelačním diagramu změnou velikosti a barvy vykreslovaných bodů | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/06_qplot_colour_and_size.R |
7 | 07_qplot_shape_and_size.R | zobrazení třetí a čtvrté vlastnosti v korelačním diagramu modifikací tvaru a velikosti vykreslovaných bodů | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/07_qplot_shape_and_size.R |
8 | 08_qplot_shape_and_size_and_colour.R | zobrazení tří dalších vlastností do korelačního diagramu s využitím tvaru, velikosti i barvy vykreslovaných bodů | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/08_qplot_shape_and_size_and_colour.R |
9 | 09_qplot_lines.R | spojení bodů vykreslených v korelačním diagramu úsečkami | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/09_qplot_lines.R |
10 | 10_qplot_smooth.R | proložení bodů v korelačním diagramu křivkou se zobrazením intervalu spolehlivosti | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/10_qplot_smooth.R |
11 | 11_qplot_smooth_color.R | rozdělení aproximační křivky na tři části v závislosti na počtu válců motoru | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/11_qplot_smooth_color.R |
12 | 12_qplot_facets.R | rozdělení grafu na menší části v závislosti na počtu válců a počtu převodových stupňů | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/12_qplot_facets.R |
13 | 13_qplot_facets_colour.R | rozdělení podle počtu válců a rychlostních stupňů, obarvení na základě páté vlastnosti | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/13_qplot_facets_colour.R |
14 | 14_qplot_facets_colour_sizes.R | přidání šesté vlastnosti (výkon motoru) reprezentované velikostí vykreslených bodů | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/14_qplot_facets_colour_sizes.R |
15 | 15_qplot_xyplot_points.R | vykreslení funkce: průběh funkce je naznačen body v grafu | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/15_qplot_xyplot_points.R |
16 | 16_qplot_xyplot_lines.R | vykreslení funkce: propojení jednotlivých bodů úsečkami | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/16_qplot_xyplot_lines.R |
17 | 17_qplot_xyplot_smooth.R | vykreslení funkce: snaha o aproximaci funkce křivkou, která k tomuto účelu není příliš vhodná | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/17_qplot_xyplot_smooth.R |
18 | 18_histogram.R | histogram vykreslený funkcí qplot | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/18_histogram.R |
19 | 19_histogram.R | histogram s upravenou šířkou intervalů | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/19_histogram.R |
20 | 20_bwplot.R | jednoduchý krabicový diagram zobrazený funkcí qplot | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/20_bwplot.R |
21 | 21_ggplot2_blank_chart.R | prázdný diagram vytvořený funkcí ggplot | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/21_ggplot2_blank_chart.R |
22 | 22_ggplot2_geom_point.R | korelační diagram vytvořený pomocí ggplot a geom_point | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/22_ggplot2_geom_point.R |
23 | 23_ggplot2_geom_smooth.R | přidání regresní přímky do korelačního diagramu | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/23_ggplot2_geom_smooth.R |
24 | 24_ggplot2_different_colors.R | kombinace několika stylů vykreslování | https://github.com/tisnik/r-examples/blob/master/10-ggplot2/24_ggplot2_different_colors.R |
20. Odkazy na Internetu
- The R Project for Statistical Computing
https://www.r-project.org/ - An Introduction to R
https://cran.r-project.org/doc/manuals/r-release/R-intro.pdf - R (programming language)
https://en.wikipedia.org/wiki/R_(programming_language) - The R Programming Language
https://www.tiobe.com/tiobe-index/r/ - R Graphics Second Edition
https://www.stat.auckland.ac.nz/~paul/RG2e/ - ggplot2 – Introduction
https://www.tutorialspoint.com/ggplot2/ggplot2_introduction.htm - Create Elegant Data Visualisations Using the Grammar of Graphics
https://www.rdocumentation.org/packages/ggplot2/versions/3.3.2 - Grid
https://www.stat.auckland.ac.nz/~paul/grid/grid.html - Interactive Course: Data Visualization with lattice in R
https://www.datacamp.com/courses/data-visualization-in-r-with-lattice - Lattice: trellis graphics for R
https://lattice.r-forge.r-project.org/ - Lattice: Multivariate Data Visualization with R
http://lmdvr.r-forge.r-project.org/figures/figures.html - Getting Started with Lattice Graphics
https://lattice.r-forge.r-project.org/Vignettes/src/lattice-intro/lattice-intro.pdf - Using lattice’s xyplot()
https://homerhanumat.github.io/tigerstats/xyplot.html - ggplot2 Tutorial
https://www.tutorialspoint.com/ggplot2/index.htm - Lattice Package in R with Functions and Graphs
https://techvidvan.com/tutorials/lattice-package-in-r/ - The R Graph Gallery
https://www.r-graph-gallery.com/index.html - Lattice Graphs
https://www.statmethods.net/advgraphs/trellis.html - ggplot2 (Graph gallery)
https://www.r-graph-gallery.com/ggplot2-package.html - R Markdown
https://rmarkdown.rstudio.com/ - R Markdown: The Definitive Guide
https://bookdown.org/yihui/rmarkdown/ - R Markdown Cheat Sheet
https://rstudio.com/wp-content/uploads/2016/03/rmarkdown-cheatsheet-2.0.pdf - Introduction to R Markdown
https://rmarkdown.rstudio.com/articles_intro.html - R Cheat Sheets
https://blog.sergiouri.be/2016/07/r-cheat-sheets.html - R Cheat Sheet
https://s3.amazonaws.com/quandl-static-content/Documents/Quandl±+R+Cheat+Sheet.pdf - Base R Cheat Sheet
https://rstudio.com/wp-content/uploads/2016/06/r-cheat-sheet.pdf - PYPL PopularitY of Programming Language
https://pypl.github.io/PYPL.html - Tiobe index
https://www.tiobe.com/tiobe-index/ - Stack Overflow: Most Loved, Dreaded & Wanted Programming Languages In 2020
https://fossbytes.com/stack-overflow-most-loved-dreaded-wanted-programming-languages-in-2020/ - How to Install and Use R on Ubuntu
https://itsfoss.com/install-r-ubuntu/ - R programming for beginners – Why you should use R
https://www.youtube.com/watch?v=9kYUGMg_14s - GOTO 2012 • The R Language The Good The Bad & The Ugly
https://www.youtube.com/watch?v=6S9r_YbqHy8 - R vs Python – What should I learn in 2020? | R and Python Comparison
https://www.youtube.com/watch?v=eRP_J2yLjSU - R Programming 101
https://www.youtube.com/c/rprogramming101 - Seriál Tvorba grafů pomocí programu „R“
https://www.root.cz/serialy/tvorba-grafu-pomoci-programu-r/ - Tvorba grafů pomocí programu „R“: úvod
https://www.root.cz/clanky/tvorba-grafu-pomoci-programu-r-1/ - Tvorba grafů pomocí programu „R“: pokročilé funkce
https://www.root.cz/clanky/tvorba-grafu-pomoci-programu-r-pokrocile-funkce/ - Tvorba grafů pomocí programu „R“: vkládání textu, čeština
https://www.root.cz/clanky/grafy-pomoci-programu-r-vkladani-textu-cestina/ - Cesta erka: Krok nultý – instalace & nastavení – prostředí, projekty, package
https://www.jla-data.net/r4su/r4su-environment-setup/ - Cesta erka: Krok první – operace a struktury – proměnné, rovnítka a dolary
https://www.jla-data.net/r4su/r4su-data-structures/ - Cesta erka: Krok druhý – načtení externích dat – csvčka, excely a databáze
https://www.jla-data.net/r4su/r4su-read-data/ - Cesta erka: Krok třetí – manipulace s daty – dplyr, slovesa a pajpy
https://www.jla-data.net/r4su/r4su-manipulate-data/ - Cesta erka: Krok čtvrtý – podání výsledků – ggplot, geomy a estetiky
https://www.jla-data.net/r4su/r4su-report-results/ - Cesta erka: Krok pátý – case study – případ piva v Praze
https://www.jla-data.net/r4su/r4su-case-study-beer/ - 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/ - Is R Programming SURGING in Popularity in 2020?
https://www.youtube.com/watch?v=Duwn-vImyXE - Using the R programming language in Jupyter Notebook
https://docs.anaconda.com/anaconda/navigator/tutorials/r-lang/ - Using R on Jupyter Notebook
https://dzone.com/articles/using-r-on-jupyternbspnotebook - Graphics, ggplot2
http://r4stats.com/examples/graphics-ggplot2/ - A Practice Data Set
https://r4stats.wordpress.com/examples/mydata/ - Shiny – galerie projektů
https://shiny.rstudio.com/gallery/ - Seriál Programovací jazyk Julia
https://www.root.cz/serialy/programovaci-jazyk-julia/ - Julia (front page)
http://julialang.org/ - Julia – repositář na GitHubu
https://github.com/JuliaLang/julia - Julia (programming language)
https://en.wikipedia.org/wiki/Julia_%28programming_language%29 - IJulia
https://github.com/JuliaLang/IJulia.jl - Introducing Julia
https://en.wikibooks.org/wiki/Introducing_Julia - Julia: the REPL
https://en.wikibooks.org/wiki/Introducing_Julia/The_REPL - Introducing Julia/Metaprogramming
https://en.wikibooks.org/wiki/Introducing_Julia/Metaprogramming - Month of Julia
https://github.com/DataWookie/MonthOfJulia - Learn X in Y minutes (where X=Julia)
https://learnxinyminutes.com/docs/julia/ - New Julia language seeks to be the C for scientists
http://www.infoworld.com/article/2616709/application-development/new-julia-language-seeks-to-be-the-c-for-scientists.html - Julia: A Fast Dynamic Language for Technical Computing
http://karpinski.org/publications/2012/julia-a-fast-dynamic-language - The LLVM Compiler Infrastructure
http://llvm.org/ - Julia: benchmarks
http://julialang.org/benchmarks/ - R Vector
https://www.datamentor.io/r-programming/vector/ - .R File Extension
https://fileinfo.com/extension/r - Lineární regrese
https://cs.wikipedia.org/wiki/Line%C3%A1rn%C3%AD_regrese - lm (funkce)
https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/lm - quit (funkce)
https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/quit - c (funkce)
https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/c - help (funkce)
https://www.rdocumentation.org/packages/utils/versions/3.6.2/topics/help - Shiny: Introduction to interactive documents
https://shiny.rstudio.com/articles/interactive-docs.html - R Release History 1997–2013
http://timelyportfolio.github.io/rCharts_timeline_r/ - R: atomic vectors
https://renenyffenegger.ch/notes/development/languages/R/data-structures/vector/ - 11 Best R Programming IDE and editors
https://www.dunebook.com/best-r-programming-ide/ - CRAN – The Comprehensive R Archive Network
https://cran.r-project.org/ - R – Arrays
https://www.tutorialspoint.com/r/r_arrays.htm - Array vs Matrix in R Programming
https://www.geeksforgeeks.org/array-vs-matrix-in-r-programming/?ref=rp - Online R Language IDE
https://www.jdoodle.com/execute-r-online/ - Execute R Online (R v3.4.1)
https://www.tutorialspoint.com/execute_r_online.php - Snippets: Run any R code you like. There are over twelve thousand R packages preloaded
https://rdrr.io/snippets/ - R Package Documentation
https://rdrr.io/ - Data Reshaping in R – Popular Functions to Organise Data
https://techvidvan.com/tutorials/data-reshaping-in-r/ - What is an R Data Frame?
https://magoosh.com/data-science/what-is-an-r-data-frame/ - What's a data frame?
https://campus.datacamp.com/courses/free-introduction-to-r/chapter-5-data-frames?ex=1 - data.frame
https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/data.frame - as.data.frame
https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/as.data.frame - table
https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/table - Python Pandas – DataFrame
https://www.tutorialspoint.com/python_pandas/python_pandas_dataframe.htm - The Pandas DataFrame: Make Working With Data Delightful
https://realpython.com/pandas-dataframe/ - Python | Pandas DataFrame
https://www.geeksforgeeks.org/python-pandas-dataframe/ - R – Factors
https://www.tutorialspoint.com/r/r_factors.htm - R – Scatterplots
https://www.tutorialspoint.com/r/r_scatterplots.htm - Quick guide to line types (lty) in R
https://www.benjaminbell.co.uk/2018/02/quick-guide-to-line-types-lty-in-r.html - Lattice C (Wikipedia)
https://en.wikipedia.org/wiki/Lattice_C - Lorenz Attractor in R
https://www.sixhat.net/lorenz-attractor-in-r.html - Small multiple
https://en.wikipedia.org/wiki/Small_multiple - Category:Infographics (infografika)
https://en.wikipedia.org/wiki/Category:Infographics - Trellis plots (pro Python)
https://subscription.packtpub.com/book/big_data_and_business_intelligence/9781784390150/4/ch04lvl1sec41/trellis-plots - Trellis (architecture)
https://en.wikipedia.org/wiki/Trellis_(architecture) - Izobara (meteorologie)
https://cs.wikipedia.org/wiki/Izobara_(meteorologie) - How to Create a Lattice Plot in R
https://www.dummies.com/programming/r/how-to-create-a-lattice-plot-in-r/ - Density estimation
https://en.wikipedia.org/wiki/Density_estimation - Sedm smrtelných statistických hříchů
http://dfens-cz.com/sedm-smrtelnych-statistickych-hrichu/ - Spurious correlations
https://tylervigen.com/spurious-correlations