Obsah
1. Základy tvorby grafů v programovacím jazyku R: knihovna lattice
2. Typy grafů podporovaných knihovnou lattice
3. Výrazy používané u různých typů grafů
5. Graf vykreslený funkcí xyplot
6. Zobrazení závislosti tlaku na teplotě i inverzního grafu
7. Rozdělení hodnot podle zvolené vlastnosti
9. Regresní přímky a interpolace hodnotami
10. Mřížka v grafech, regresní přímky či interpolace při rozdělení hodnot do skupin
11. Samostatné grafy řízené třetí veličinou
12. Kombinace předchozích možností
13. Trojrozměrný korelační graf
14. Ukázky použití grafu typu cloud
16. Zobecnění histogramů – distribuce dat přes spojitý interval
17. Další příklady použití funkce densityplot
18. Obsah následující části seriálu
19. Repositář s demonstračními příklady
1. Základy tvorby grafů v programovacím jazyku R: knihovna lattice
Při analýze dat nebo i při tvorbě infografiky se poměrně často setkáme s požadavkem na zobrazení průběhů funkcí, popř. naměřených nebo vypočtených bodů ve vícedimenzionálním prostoru. Tento požadavek je pochopitelně obtížné splnit v jediném grafu, i když se použije 3D zobrazení, několik barevných škál, popř. různé styly vykreslování. Jedno z možných a často používaných řešení spočívá v tom, že se namísto jediného grafu zobrazí větší množství dvojdimenzionálních grafů umístěných do pravidelné mřížky. Pokud se přitom zachovají měřítka na souřadných osách, lze z vykreslených grafů poměrně dobře odvodit vlastnosti měřeného nebo počítaného systému (popř. modelu), což je velká přednost, například i v porovnání s běžnými typy 3D grafů. K tvorbě podobných grafů, které se někdy nazývají trellis plots, protože do jisté míry připomínají pnoucí se květiny rostoucí v zahradních mřížích. Můžeme se ovšem setkat i s dalšími označeními, například trellis chart, alternativně i grid chart, panel chart, popř. lattice chart (ostatně z tohoto názvu je odvozeno jméno dnes popisované knihovny).
Obrázek 1: Příkladem jednoduchého lattice grafu je korelační diagram, s nímž jsme se seznámili v předchozím článku v souvislosti se standardní knihovnou jazyka R určenou pro tvorbu grafů a diagramů.
Tyto typy grafů je možné v programovacím jazyku R vytvářet hned několika způsoby. Základ tvoří balíček pojmenovaný grid, jenž zajišťuje nízkoúrovňový přístup, což znamená nutnost provádění poměrně velkého množství práce i při tvorbě relativně jednoduchého diagramu. Ostatně právě z tohoto důvodu se prozatím tímto balíčkem zabývat nebudeme, protože jeho znalost většinou není v praxi nutně vyžadována. Pro vysokoúrovňový přístup k tvorbě grafů a diagramů jsou naopak určeny knihovny postavené přímo či nepřímo nad gridem. V současnosti se jedná o knihovny nazvané ggplot2 a lattice. V dnešním článku se seznámíme s některými možnostmi nabízenými knihovnou lattice; knihovně ggplot2 budou věnovány navazující části tohoto seriálu (bude jich větší množství, a to z toho prostého důvodu, že ggplot2 je velmi flexibilní a umožňuje vykreslení a úpravu mnoha typů grafů).
Připomeňme si koncept nejpoužívanějších knihoven pro tvorbu grafů v jazyku R, který byl již uveden v předchozím článku:
- 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
Myšlenky, které jsou realizovány v knihovně Lattice, vznikly ve starší knihovně nazvané Trellis Graphics, která byla určena pro systém S a S-PLUS. Za vývojem této knihovny stál především R. A. Becker a W. S. Cleveland. Koncepty, které byly v knihovně Trellis Graphics implementovány, byly použity a ukázány i v Clevelandově knize Visualizing Data, která byla poprvé vydána již v roce 1993. Ovšem Lattice není pouhým přepisem Trellis Graphics; při přechodu ze systému S na R došlo k mnoha vylepšením a taktéž k úpravám API.
Obrázek 2: Přebal Clevelandovy knihy „Visualizing Data“.
Obrázek 3: Logo překladače Lattice C.
2. Typy grafů podporovaných knihovnou lattice
Zaměřme se nyní na popis možností balíčku či možná lépe řečeno knihovny lattice. V této knihovně je podporována tvorba relativně velkého množství standardních grafů, které je možné skládat do výše zmíněných mřížek. Především se jedná o grafy určené pro vykreslení jednodimenzionální veličiny (jedné proměnné):
# | Jméno funkce pro vykreslení | Stručný popis |
---|---|---|
1 | barchart | sloupcový graf |
2 | histogram | klasický histogram |
3 | densityplot | zobrazení distribuce dat přes spojitý interval (zobecnění histogramů) |
4 | bwplot | takzvané krabicové grafy (hodnota + rozptyl atd.) |
5 | dotplot | bodový graf |
6 | qqmath | grafy kvantilu proti matematickým rozložením |
7 | stripplot | korelační diagram, ovšem pouze jednodimenzionální |
Obrázek 4: Příklad grafu vytvořeného funkcí barchart (sloupcový graf) poskytované knihovnou lattice.
K dispozici jsou i funkce pro vykreslení grafů o dvou proměnných, tedy x-y grafy:
# | Jméno funkce pro vykreslení | Stručný popis |
---|---|---|
1 | xyplot | bodový vícedimenzionální graf |
2 | porovnání dvou rozložení |
Obrázek 5: Příklad grafu vytvořeného funkcí levelplot (zakódování výšky barvou) poskytované knihovnou lattice.
V případě, že je zapotřebí zobrazit funkce typu z=f(x,y), hodnoty matic atd., lze pro tento účel použít následující funkce:
# | Jméno funkce pro vykreslení | Stručný popis |
---|---|---|
1 | cloud | bodový graf v trojrozměrném prostoru |
2 | contourplot | zobrazení kontur (vrstevnice, popř. izobary na mapě atd.) |
3 | wireframe | zobrazení průběhu, popř. naměřených hodnot ve formě 3D povrchu (drátový model) |
4 | levelplot | zakódování výšky formou barevné informace |
Podporovány jsou i další funkce, například splom, parallel, rfs či tmd, jejichž význam si vysvětlíme později.
Obrázek 6: Příklad grafu vytvořeného funkcí wireframe (drátový model, vyplněné plošky) poskytované knihovnou lattice.
3. Výrazy používané u různých typů grafů
Funkcím určeným pro vykreslení grafů je pochopitelně nutné předat data pro vykreslení v očekávaném formátu. Způsob specifikace těchto dat může být zpočátku matoucí. Z tohoto důvodu je v následující tabulce ukázán typický způsob zápisu dat. Podrobnosti budou pochopitelně ukázány v konkrétních demonstračních příkladech:
# | Typ grafu | Výraz (příklad) |
---|---|---|
1 | barchart | x~A nebo A~x |
2 | bwplot | x~A nebo A~x |
3 | cloud | z~x*y|A (vytvoření většího množství grafů podle A) |
4 | contourplot | z~x*y |
5 | densityplot | ~x|A*B |
6 | dotplot | ~x|A |
7 | histogram | ~x |
8 | levelplot | z~y*x |
9 | parallel | datový rámec |
10 | splom | datový rámec |
11 | stripplot | A~x nebo x~A |
12 | xyplot | y~x|A |
13 | wireframe | z~y*x |
Obrázek 7: Příklad grafu vytvořeného funkcí contourplot (kontury, vrstevnice, izobary) poskytované knihovnou lattice.
Mnoho z výše uvedených výrazů bude použito v dnešních demonstračních příkladech.
4. Import knihovny lattice
Knihovnu lattice je nutné před použitím jejich funkcí naimportovat. K tomu lze použít příkaz library:
library(package = "lattice")
Alternativně je možné přímo specifikovat jméno knihovny bez explicitního pojmenování parametru:
library(lattice)
Následně se můžeme přesvědčit, že k importu knihovny skutečně došlo, a to například tak, že si necháme zobrazit nápovědu dodávanou společně s knihovnou lattice:
help(lattice)
S výsledkem (pochopitelně zkráceným):
A_01_Lattice package:lattice R Documentation Lattice Graphics Description: The ‘lattice’ add-on package is an implementation of Trellis graphics for R. It is a powerful and elegant high-level data visualization system with an emphasis on multivariate data. It is designed to meet most typical graphics needs with minimal tuning, but can also be easily extended to handle most nonstandard requirements. Details: Trellis Graphics, originally developed for S and S-PLUS at the Bell Labs, is a framework for data visualization developed by R. A. Becker, W. S. Cleveland, et al, extending ideas presented in Cleveland's 1993 book _Visualizing Data_. The Lattice API is based on the original design in S, but extends it in many ways. The Lattice user interface primarily consists of several ‘high-level’ generic functions (listed below in the “See Also” section), each designed to create a particular type of display by default. Although the functions produce different output, they share many common features, reflected in several common arguments that affect the resulting displays in similar ways. These arguments are extensively (sometimes only) documented in the help page for ‘xyplot’, which also includes a discussion of the important topics of _conditioning_ and control of the Trellis layout. Features specific to other high-level functions are documented in their respective help pages. ... ... ...
5. Graf vykreslený funkcí xyplot
Nejprve si ukažme základní způsob použití jednoho z nejjednodušších typů grafů podporovaných knihovnou lattice. Jedná se o bodový graf vykreslený funkcí nazvanou xyplot. Tato funkce se v některých ohledech podobá klasické funkci plot, což je ostatně patrné i při pohledu na dnešní první demonstrační příklad, jenž vypadá následovně:
library(lattice) input <- mtcars[,c('wt','mpg')] xyplot(input$wt~input$mpg)
Po spuštění tohoto demonstračního příkladu by se měl zobrazit graf, který ukazuje základní vztah mezi spotřebou a hmotností automobilů z databáze (resp. přesněji řečeno datového rámce), který je součástí základní knihovny programovacího jazyka R:
Obrázek 8: Základní graf vykreslený funkcí xyplot.
Existuje i jednodušší způsob zápisu, v němž se v pojmenovaném parametru data deklaruje vstupní datový rámec. V tomto případě se ve výrazu y~x nemusí uvádět plné jméno vektoru vzniklé spojením jména rámce a vektoru s využitím $. Současně se změní i popisky os:
library(lattice) input <- mtcars[,c('wt','mpg','gear')] xyplot(wt~mpg, data = input)
Obrázek 9: Základní graf vykreslený funkcí xyplot, změna popisků os.
Ve skutečnosti nemusí být druhý parametr pojmenovaný, takže zápis lze ještě více zkrátit tak, jak je to ukázáno v další variantě:
library(lattice) input <- mtcars[,c('wt','mpg')] xyplot(wt~mpg, input)
Obrázek 10: Základní graf vykreslený funkcí xyplot, změna popisků os.
6. Zobrazení závislosti tlaku na teplotě i inverzního grafu
Uveďme si ještě dva doplňkové demonstrační příklady, které jsou tentokrát založeny na vizualizaci dat uložených do datového rámce pojmenovaného pressure, jenž je opět součástí standardní instalace programovacího jazyka R a jeho knihoven:
print(pressure) temperature pressure 1 0 0.0002 2 20 0.0012 3 40 0.0060 4 60 0.0300 5 80 0.0900 6 100 0.2700 7 120 0.7500 8 140 1.8500 9 160 4.2000 10 180 8.8000 11 200 17.3000 12 220 32.1000 13 240 57.0000 14 260 96.0000 15 280 157.0000 16 300 247.0000 17 320 376.0000 18 340 558.0000 19 360 806.0000
Zobrazení závislosti tlaku na teplotě, tj. závislé veličiny na veličině nezávislé, se provede snadno:
library(lattice) xyplot(pressure ~ temperature, pressure)
S tímto výsledkem:
Obrázek 11: Závislost tlaku na teplotě.
Nikdo nám ovšem nebrání otočit obě osy a vykreslit tak závislost teploty na tlaku:
library(lattice) xyplot(temperature ~ pressure, pressure)
Nyní bude (podle očekávání) graf odlišný:
Obrázek 12: Závislost teploty na tlaku (tedy prohození os).
7. Rozdělení hodnot podle zvolené vlastnosti
V případě, že je nutné zobrazované hodnoty rozdělit podle další (třetí) vlastnosti, použije se specifikátor group tak, jak je to naznačené v dalším demonstračním příkladu:
library(lattice) input <- mtcars[,c('wt','mpg','gear')] xyplot(wt~mpg, data = input, group=gear)
Pokud tento specifikátor použijeme, nezobrazí se pouze jediná množina bodů, ale body jsou rozděleny podle toho, do jaké kategorie představované třetí veličinou spadají. Je tedy vhodné, aby byl tento třetí sloupec v datovém rámci reprezentován buď formou faktoru nebo obsahoval pouze omezené množství hodnot. To je ostatně i náš případ, kdy automobily rozdělujeme podle počtu rychlostí (rychlostních stupňů):
Obrázek 13: Rozdělení hodnot podle zvolené vlastnosti.
Zobrazit můžeme i legendu k jednotlivým barvám použitým v grafu. Pro tento účel se použije přepínač auto.key (pokud už daný popis není součástí datového rámce):
library(lattice) input <- mtcars[,c('wt','mpg','gear')] xyplot(wt~mpg, data = input, group=gear, auto.key=TRUE)
Obrázek 14: Automatické vygenerování klíčů vlastnosti, podle které se vytváří skupiny.
8. Vylepšení popisků grafu
Do grafu lze pochopitelně přidat i popisky jednotlivých os, což je ostatně téma, které již známe z předchozích článků, takže jen v krátkosti:
library(lattice) input <- mtcars[,c('wt','mpg','gear')] xyplot(wt~mpg, data = input, group=gear, auto.key=TRUE, xlab = "Miles/(US) gallons", ylab = "Weight (1000lbs)")
Výsledek bude vypadat takto:
Obrázek 15: Upravené popisky os.
Tutéž specifikaci je možné provést i u lattice grafů jiných typů (popsaných dále). Například:
library(lattice) input <- mtcars[,c('wt','mpg','hp','gear')] densityplot(~ mpg | gear, data = input, plot.points = FALSE, xlab = "Miles/(US) gallons", ylab = "Weight (1000lbs)")
9. Regresní přímky a interpolace hodnotami
Do grafu typu xyplot je možné přidat regresní přímku, a to konkrétně s využitím pojmenovaného parametru type. Hodnotou tohoto parametru je vektor, v němž se specifikuje, jaké údaje se mají v grafu zobrazit. V dalším demonstračním příkladu specifikujeme, že se mají vykreslit jednotlivé body (vstupní data, „p“) a taktéž regresní přímka („r“). Vektor se specifikací typu vykreslení je zvýrazněn:
library(lattice) input <- mtcars[,c('wt','mpg','gear')] xyplot(wt~mpg, data = input, type = c("p", "r"), xlab = "Miles/(US) gallons", ylab = "Weight (1000lbs)")
Obrázek 16: Přidání regresní přímky do grafu.
Podobným způsobem můžeme do grafu přidat i křivku, která se snaží interpolovat naměřené (resp. přesněji řečeno zobrazené) hodnoty. V tomto případě je ve vektoru předaného v parametru type uveden řetězec „smooth“:
library(lattice) input <- mtcars[,c('wt','mpg','gear')] xyplot(wt~mpg, data = input, type = c("p", "smooth"), xlab = "Miles/(US) gallons", ylab = "Weight (1000lbs)")
Nyní bude výsledek vypadat následovně:
Obrázek 17: Interpolace naměřenými body.
10. Mřížka v grafech, regresní přímky či interpolace při rozdělení hodnot do skupin
Do grafů je – podle očekávání – možné přidat i mřížku usnadňující orientaci v zobrazených hodnotách, a to konkrétně specifikací typu „g“ v parametru type. Podívejme se na následující demonstrační příklad, v němž je mřížka povolena a zobrazena:
library(lattice) input <- mtcars[,c('wt','mpg','gear')] xyplot(wt~mpg, data = input, type = c("p", "g", "smooth"), xlab = "Miles/(US) gallons", ylab = "Weight (1000lbs)")
Výsledek by v tomto případě měl vypadat následovně:
Obrázek 18: Přidání mřížky do grafu.
V případě, že se při vykreslení grafu použije parametr group= pro rozdělení výsledků na základě další veličiny, je stále možné do takového grafu přidat regresní přímku (type = c(…, „r“):
library(lattice) input <- mtcars[,c('wt','mpg','gear')] xyplot(wt~mpg, data = input, group=gear, auto.key=TRUE, type = c("p", "r"), xlab = "Miles/(US) gallons", ylab = "Weight (1000lbs)")
Ve skutečnosti se nyní namísto jediné regresní přímky zobrazí tolik přímek, kolik existuje rozdílných hodnot další veličiny, podle které je graf rozdělen:
Obrázek 19: Seskupení + regresní přímky.
Další graf bude obsahovat trojici interpolací naměřenými hodnotami, pokaždé pro ty automobily, které mají shodný počet rychlostních stupňů. Jedná se tedy opět o kombinaci možností popsaných v předchozím textu:
library(lattice) input <- mtcars[,c('wt','mpg','gear')] xyplot(wt~mpg, data = input, group = gear, auto.key = TRUE, type = c("p", "smooth"), xlab = "Miles/(US) gallons", ylab = "Weight (1000lbs)")
Výsledný graf může vypadat následovně:
Obrázek 20: Seskupení + interpolace hodnotami.
11. Samostatné grafy řízené třetí veličinou
Nyní se konečně dostáváme k lattice diagramům a grafům, tedy ke skupině grafů rozdělených na základě nějaké podmínky. V dalším demonstračním příkladu je ukázáno, jak lze původně jediný diagram typu xyplot rozdělit na několik diagramů, a to na základě toho, kolik rychlostních stupňů má daný automobil – každá hodnota (informace o každém automobilu) je tedy použita vždy pouze v jediném grafu:
library(lattice) input <- mtcars[,c('wt','mpg','gear')] xyplot(wt~mpg | gear, data = input, xlab = "Miles/(US) gallons", ylab = "Weight (1000lbs)")
Povšimněte si způsobu zápisu, který lze přečíst následovně: „vykresli závislost váhy na spotřebě rozděleno (za podmínky) stejného počtu rychlostních stupňů“
Obrázek 21: Samostatné grafy pro hodnoty vybrané podle počtu rychlostí, stejná měřítka na osách.
Ve výchozím nastavení mají všechny grafy umístěné v mřížce shodné meze hodnot na osách. Toto chování (které je velmi užitečné, protože umožňuje grafy porovnat) můžeme vypnout volbou scales = „free“:
library(lattice) input <- mtcars[,c('wt','mpg','gear')] xyplot(wt~mpg | gear, data = input, xlab = "Miles/(US) gallons", ylab = "Weight (1000lbs)", scales = "free")
Nyní bude výsledek vypadat poněkud odlišně:
Obrázek 22: Samostatné grafy pro hodnoty vybrané podle počtu rychlostí, rozdílná měřítka na osách.
12. Kombinace předchozích možností
V předchozích kapitolách popsané možnosti grafů typu xyplot je možné zkombinovat, například přidat do rozdělených grafů regresní přímky:
library(lattice) input <- mtcars[,c('wt','mpg','gear')] xyplot(wt~mpg | gear, data = input, type = c("p", "r"), xlab = "Miles/(US) gallons", ylab = "Weight (1000lbs)")
S výsledkem:
Obrázek 23: Samostatné grafy pro hodnoty vybrané podle počtu rychlostí, přidání regresních přímek.
Popř. s interpolací průběhů:
library(lattice) input <- mtcars[,c('wt','mpg','gear')] xyplot(wt~mpg | gear, data = input, type = c("p", "smooth"), xlab = "Miles/(US) gallons", ylab = "Weight (1000lbs)", scales = "free")
S nepatrně odlišným výsledkem:
Obrázek 24: Samostatné grafy pro hodnoty vybrané podle počtu rychlostí, přidání interpolace průběhy.
13. Trojrozměrný korelační graf
Dalším typem grafu podporovaným knihovnou lattice je trojrozměrný korelační graf. Jedná se o rozšíření grafu vykreslovaného funkcí xyplot do třech rozměrů – pro vykreslování se tedy budou používat tři stejně dlouhé vektory představující pozice bodů v trojrozměrném prostoru (x-ové souřadnice jsou v prvním vektoru atd.). Trojrozměrný korelační graf se vykresluje funkcí nazvanou cloud:
help(cloud) B_07_cloud package:lattice R Documentation 3d Scatter Plot and Wireframe Surface Plot Description: Generic functions to draw 3d scatter plots and surfaces. The ‘"formula"’ methods do most of the actual work. Usage: cloud(x, data, ...) wireframe(x, data, ...) ## S3 method for class 'formula' cloud(x, data, allow.multiple = is.null(groups) || outer, outer = FALSE, auto.key = FALSE, aspect = c(1,1), panel.aspect = 1, panel = lattice.getOption("panel.cloud"), prepanel = NULL, scales = list(), strip = TRUE, groups = NULL, xlab, ylab, zlab, xlim = if (is.factor(x)) levels(x) else range(x, finite = TRUE), ylim = if (is.factor(y)) levels(y) else range(y, finite = TRUE), zlim = if (is.factor(z)) levels(z) else range(z, finite = TRUE), at, drape = FALSE, pretty = FALSE, drop.unused.levels, ..., lattice.options = NULL, default.scales = list(distance = c(1, 1, 1), arrows = TRUE, axs = axs.default), default.prepanel = lattice.getOption("prepanel.default.cloud"), colorkey, col.regions, alpha.regions, cuts = 70, subset = TRUE, axs.default = "r")
Způsob specifikace dat, které se mají vykreslit, je opět odlišný:
cloud(wt~mpg*hp, data = input)
14. Ukázky použití grafu typu cloud
Trojrozměrné korelační diagramy nemusí být tím nejlepším řešením ve chvíli, kdy se zobrazují nespojitá data, což je i náš případ datového rámce s informacemi o automobilech. Ostatně to můžete posoudit sami po spuštění následujícího demonstračního příkladu:
library(lattice) input <- mtcars[,c('wt','mpg','hp')] cloud(wt~mpg*hp, data = input)
Obrázek 25: Trojrozměrný korelační diagram.
Podporováno je i rozdělení bodů do skupin:
library(lattice) input <- mtcars[,c('wt','mpg','hp','gear')] cloud(wt~mpg*hp, data = input, group = gear, auto.key=TRUE)
S výsledkem:
Obrázek 26: Rozdělení bodů do skupin.
Názornější je použití odlišného standardního datového rámce nazvaného „iris“:
library(lattice) data("iris") head(iris) input <- iris[,c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width')] cloud(Sepal.Length~Sepal.Width*Petal.Length, data = input)
Obrázek 27: Použití odlišného zdroje dat, v nichž lze rozeznat několik „clusterů“.
15. Histogramy
Tato kapitola bude velmi stručná, protože si v ní popíšeme známý typ diagramu – histogram. Tento velmi užitečný (kupodivu však mnohdy přehlížený) graf se vykresluje funkcí nazvanou jednoduše histogram:
help(histogram) B_03_histogram package:lattice R Documentation Histograms and Kernel Density Plots Description: Draw Histograms and Kernel Density Plots, possibly conditioned on other variables. Usage: histogram(x, data, ...) densityplot(x, data, ...) ## S3 method for class 'formula' histogram(x, data, allow.multiple, outer = TRUE, auto.key = FALSE, aspect = "fill", panel = lattice.getOption("panel.histogram"), prepanel, scales, strip, groups, xlab, xlim, ylab, ylim, type = c("percent", "count", "density"), nint = if (is.factor(x)) nlevels(x) else round(log2(length(x)) + 1), endpoints = extend.limits(range(as.numeric(x), finite = TRUE), prop = 0.04), breaks, equal.widths = TRUE, drop.unused.levels = lattice.getOption("drop.unused.levels"), ..., lattice.options = NULL, default.scales = list(), default.prepanel = lattice.getOption("prepanel.default.histogram"), subscripts, subset)
Podívejme se nyní na příklad použití histogramu. Použijeme jediný vektor s hodnotami, například výkon motoru:
library(lattice) input <- mtcars[,c('wt','mpg','hp','gear')] histogram(~ hp, data = input, plot.points = FALSE)
S výsledkem:
Obrázek 28: Histogram s počtem převodových stupňů vozidel.
Specifikovat je možné i počet intervalů, a to pojmenovaným parametrem breaks:
library(lattice) input <- mtcars[,c('wt','mpg','hp','gear')] histogram(~ hp, data = input, breaks = 16, plot.points = FALSE)
Obrázek 29: Zvětšení počtu intervalů v histogramu.
I histogram lze rozdělit ve stylu lattice diagramů:
library(lattice) input <- mtcars[,c('wt','mpg','hp','gear')] histogram(~ hp |gear, data = input, breaks = 16, plot.points = FALSE)
Obrázek 30: Rozdělení histogramu podle hodnot gear.
16. Zobecnění histogramů – distribuce dat přes spojitý interval
S využitím vhodného jádra (kernel) je možné původně diskrétní histogram převést na graf se spojitým průběhem. V knihovně lattice tuto funkcionalitu zajišťuje funkce densityplot. Její nejjednodušší použití vypadá následovně:
library(lattice) input <- mtcars[,c('wt','mpg','hp','gear')] densityplot(~ wt, data = input)
Ve výsledném grafu budou zobrazeny jak jednotlivé hodnoty wt v daném intervalu, tak i graf spočtený s využitím kernelu:
Obrázek 31: Výsledek volání funkce densityplot.
Body, které mohou být spíše matoucí, je možné odstranit volbou plot.points = FALSE:
library(lattice) input <- mtcars[,c('wt','mpg','hp','gear')] densityplot(~ wt, data = input, plot.points = FALSE)
Obrázek 32: Odstranění bodů z grafu.
17. Další příklady použití funkce densityplot
Podívejme se na další příklad použití funkce densityplot, v níž namísto histogramu se třemi sloupci zobrazíme spojitý průběh (který je ovšem zrovna v tomto případě dost matoucí pro případné čtenáře, protože mj. naznačuje, že se jedná o spojitou veličinu, což není pravda):
library(lattice) input <- mtcars[,c('wt','mpg','hp','gear')] densityplot(~ gear, data = input, plot.points = FALSE)
Výsledek:
Obrázek 33: Další graf vytvořený funkcí densityplot.
Hodnoty je možně rozdělit do skupin podle zvolené veličiny (zde opět počet rychlostních stupňů):
library(lattice) input <- mtcars[,c('wt','mpg','hp','gear')] densityplot(~ mpg, data = input, groups = gear, auto.key = TRUE, plot.points = FALSE)
Obrázek 34: Rozdělení hodnot do skupin podle zvolené veličiny.
Užitečnější může být rozdělení na lattice grafy na základě zvolené veličiny:
library(lattice) input <- mtcars[,c('wt','mpg','hp','gear')] densityplot(~ mpg | gear, data = input, plot.points = FALSE)
Obrázek 35: Další příklad využití lattice grafů.
18. Obsah následující části seriálu
V následující části seriálu o programovacím jazyku R dokončíme popis knihovny lattice. Ukážeme si například následující (již složitější) příklady:
library(lattice) x <- seq(-1.1*pi, 1.1 * pi, length.out = 30) y <- seq(-1.1*pi, 1.1 * pi, length.out = 30) r <- as.vector(sqrt(outer(x^2, y^2, "+"))) grid <- expand.grid(x=x, y=y) grid$z <- cos(r) wireframe(z ~ x * y, grid, col.regions = topo.colors(20), at = c(-Inf, seq(-0.8, 0.8, by = 0.2), Inf))
popř.:
library(lattice) x <- seq(-1.1*pi, 1.1 * pi, length.out = 30) y <- seq(-1.1*pi, 1.1 * pi, length.out = 30) r <- as.vector(sqrt(outer(x^2, y^2, "+"))) grid <- expand.grid(x=x, y=y) grid$z <- cos(r) + sin(x-0.5) contourplot(z ~ x * y, grid, col.regions = topo.colors(20), at = c(-Inf, seq(-0.8, 0.8, by = 0.2), Inf))
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:
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/ - 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