V R dnes existují dva rúzné systémy pro tvorbu diagramů. První je obsažen v balíčku base a druhý staví na funkcionalitě obsažené v grid. V tomto kurzu budeme pracovat s base.
Opět připravíme datovou sadu, tentokrát umístíme do data.frame jménem dfr.
Kód
dfr <-data.frame(X =1:100,Y =rnorm(100))
1
K vytvoření proměnné \(Y\) použijeme generování čísel z náhodného rozdělení s parametry \(\mu = 0\) a \(\sigma = 1\); více v Kapitola 7. Velká písmena jsou zvolena pro odlišnost od argumentů funkce.
Úloha
Zadejte do konzole demo(graphics) a projeďte až na konec ukázky. Potom vyčistěte panely Environment, Plots a Console.
Pročtěte si nápovědu ?par
5.1 Jednorozměrná data
Jednorozměrná data nejčastěji kreslíme pomocí boxplotu, histogramu a sloupcového grafu.
Rozdělení grafického okna na tři sloupce (viz níže).
2
Funkce pro jednorozměrné grafy v základní parametrizaci.
Úloha
Podívejte se na oba krajní grafy předchozího výstupu a popište, rozdíl mezi histogramem a sloupcovým grafem.
Podívejte se do nápovědy k funkci hist() a doplňte následující kód tak, aby koše měly hranice od \(-4\) do \(4\) s krokem \(0,5\). hist(dfr$Y, breaks =)
5.2 Funkce curve()
Curve je funkce, která se uplatní při tvorbě symbolických grafů matematických funkcí, kdy není třeba parametrizovat argument x. Další argumenty ?par jsou stejné jako u plot().
Kód
curve(expr =tanh(x),from =-pi, to = pi)curve(expr =tanh(2*x),from =-pi, to = pi, add =TRUE)
5.3 Funkce plot()
plot(x, y, ...) je základní S3 generická funkce, jejíž metody umožňují použití na široké množství objektů. Začneme s použitím na vektor z datasetu dfr.
Kód
plot(dfr$X, dfr$Y)
1
Funkce má věšinu svých argumentů parametrizovaných v přednastavenými hodnotami, nebo hodnotami novodvozenými od parametru. Vidíme tak, že osa \(y\) je pojmenována po vstupním parametru.
Volba typu grafu "b" označuje body protnuté spojnicí.
3
Volba barvy popředí znaku bod/přímka.
4
Volba charakteru bodového znaku.
5
Volba barvy pozadí znaku umožňujícího výplň - bod.
6
Změna rozsahu osy \(y\).
7
Změna názvu os.
8
Znění hlavního nadpisu.
9
Podnadpis dtto.
10
Pokračujeme nastavením umístění legendy.
11
Výplň prvku v legendě.
12
Typ prvku v legendě.
13
Název prvku v legendě.
14
Volba barvy ohraničení legendy
15
Volba typu spojnice (1 = plná čára)
16
Volba barvy popředí prvku legendy
U funkcí, do kterých vstupuje více proměnných z jednoho datasetu je možné z důvodu přehledonosti použít obalovací funkci with(), s níž pak není třeba provádět opakovaně podvýběr.
Kód
with(data = dfr,expr = {plot(x = X, y = Y)lines(x = X, y = Y) } )
1
Funkce with() umožňuje zavolání funkce uvedené v arugmentu expr na proměnných v data.frame. Odpadá opakované psaní prefixu datové sady (zde dfr$___)
2
Argument expr může obsahovat i blok kódu {...}, jako je tomu v tomto případě.
5.4 Volba barev
Barvy je možné aplikovat na všechny prvrky grafu. Buď je možné psát barvy dle názvů, například "white", "orange" použít funkci rgb() a nebo hexadecimální zápis "#FFF000". Výpis všech předdefinovaných barev1 lze získat příkazem colors().
Součástí základní sady je sada palet a balík RColorBrewer.
Kód
RColorBrewer::display.brewer.all()
K vytvoření palety (vektoru) barev pak žádáme \(n\) barev z předdefinovaného jmenného rozsahu.
Kód
RColorBrewer::brewer.pal(n =100, name ="RdBu")
Warning in RColorBrewer::brewer.pal(n = 100, name = "RdBu"): n too large, allowed maximum for palette RdBu is 11
Returning the palette you asked for with that many colors
Warning in rbind(rainbow = rainbow(10), heat.colors = heat.colors(10),
cm.colors = cm.colors(10), : number of columns of result is not a multiple of
vector length (arg 4)
Správná volba barev v grafech odborných publikací je velmi důležitá. V ideálním případě by grafické škály měly být stejné čitelné jak pro lidi s poruchou barevného spektra, tak v černobílem tisku. Obojí je řešeno například pomocí balíčku scicoPedersen a Crameri (2021). Ve zkratce je problematika vysvětlena například ve vignette balíčku viridis.
Úloha
následujícím příkladu vytvoříte graf Budykovy křivky.
Postup:
Nahrajte do prostředí data ze souboru ./data/budyko_dfr.
Začněte tvorbu grafu s funkcí plot.new()
Nejjednodušší vztah popsal Schreiber v roce 1902 \[
\dfrac{\textrm{Ea}}{\textrm{P}_a} = 1-\exp(-\phi)
\]
Vytvořte posloupnost od \(0\) do \(2\) s krokem \(10e^{-3}\) a uložte do proměnné phi.
Pro posloupnost phi spočítejte Schreiberovu rovnici a uložte do schreiber.
S pomocí následujícího příkazu vytvořte barevné schéma paleta <- rev(rainbow(20, start = 0, end = 0.6))
Vyneste body x = budyko_dfr$PET_over_P a y = budyko_dfr$ET_over_P.
Nastavte xlab = "Ep/P", ylab = "P/Er", xlim v rozsahu \(\phi\) a ylim od \(0\) do \(1,2\).
Vyneste do plotu liniové segmenty \((0;0)\) – \((1;1)\) a \((1;1)\) – \((2;1)\).
Funkcí grid() přidejte tečkovanou mřížku.
Pokuste se výsledkem přiblížit následovnému grafu, použijte nápovědy:
5.5 Matematická sazba v grafech
Dá se použít v místě textu, nadpisu nebo jiného popisku.
?plotmath demo(plotmath)
Kód
plot(x = dfr$X, y = dfr$X^2, main =expression(paste("graf ", y == x^2)), ylab =expression(paste(y == x^2)))
5.6 Layout
Jednoduchý pravidelný layout můžeme vytvořit změnou parametrů okna grafického výstupu pomocí funkce par()
5.6.1 Sazba pomocí par()
Kód
par(mfrow =c(1, 2))hist(dfr$X, main ="X", xlab ="")hist(dfr$Y, main ="Y", xlab ="")
1
Okno výstupu rozdělíme do dvou sloupců na jednom řádku.
2
Posléze voláme dva grafy, které postupně vyplní pole v daném okně.
Vytvořte layout dle následujícího nákresu a vyplňte libovolnými rúznými typy grafů.
5.7 Uložení do souboru
Grafy je možné uložit externě, at už prostřednictvím dialogu v Plots > Export, nebo přímo ve skriptu. Formát lze volit mezi rastrovými *.png, *.jpeg, *.tiff, *.bmp, či vektorovými *.eps, *.svg, *.pdf.
Kód
png("./budyko_kompozit.png", width =8, height =6, units ="px", res =300)...dev.off()
1
Standardním způsobem vytvořený diagram či layout.
Úloha
Vytvořte poslouponost t <- seq(from = 2010, to = 2020, length = 200)) a potom do stejného grafu vyneste \(\sin(2\pi(t - 1))\) a \(\cos^2(2\pi t)\).
Vytvořte layout ze 4. úlohy a uložte předchozí graf a dva další do souboru s pomocí funkce pdf(). Využijte naápovědy.
Pedersen, Thomas Lin, a Fabio Crameri. 2021. „Package ’scico’".