<table width = 900 border = 0><tr><td>
# <b>NMSA230 - 	Úvod do programování v R</b>
### Zimný semester 2019/2020 | Cvičenie 3 | St 06/11/19

**************
**************

## <font color = "#880000"><b>III. Grafické nástroje v programe R</b></font>

<br>
<b>Všeobecné informáie</b><br>
<ul>
<li>K práci na seminári je potrebný programo R (Team Development Core, 2019), ktorý je 
dostupný pod GNU GPL licenciou  (free of charge) na  adrese 
<a href = "https://www.r-project.org">https://www.r-project.org</a>.
K dispozícii sú distribúcie s  podporou pre OS Windows, Linux, aj Macintosh.</li>

<li>Základnú inštaláciu programu R je možne rozšíriť o ďalšie dodatočné knižníce (packages), ktoré 
sú k dispozícii na rôznych online repozitároch (zoznam hlavných repozitárov je na adrese <a href = "https://cran.r-project.org/mirrors.html">https://cran.r-project.org/mirrors.html</a>). Na inštaláciu konkrétneho baličku/knižnice v programe R slúži príkaz `install.packages("***")`, kde namiesto `***`
je potrebné uviesť správne meno príslušného balíčka.</li>

<li>Okrem samotného programu R a rozširujúcich knižníc sú k dispozícii aj rôzne užívateľské rozhrania (user interfaces), ktoré je možne dodatočne nainštalovať a umožňujú (v určitých smeroch) jednoduchšiu a prehľadnejšiu prácu s programom R. Najznámejší a pravdepodobne aj jeden z najlepších R interface je <a href = "https://www.rstudio.com">RStudio</a> (defaultne nainštalované na každom počítači v posluchárni).
</li>

<li>Dalšie rozšírenia sú k dispozícii  pre umožnenie fungovania programu R s inými programamy - napr. LaTeX, C++, Python, alebo optimalizačný toolbox Mosek (ale aj mnoho ďalších).
</li>
</ul>

<br>
<b>Stručný program trietieho semináru NMSA 230</b><br>
<ul>
<li>Oboznámenie sa so zkladnými funkciami a nástrojmi, ktoré sú v programe R určené k vytváraniu rôznych grafických 
výstupov (obrázky, grafy, boxploty, diagramy, atď.).</li>

<li>Využitie grafických nástrojov pre jednoduchú exploratívnú analýzu za účelom vhodného doplnenia základných popisných charakteristík.</li>

<li>Podrobnejší "sprievodca" pre jednoduchú prácu s programom R: <a href = "NMSA230/introR-2015.pdf">Hrátky s R</a> (autor: <a href = "http://www.karlin.mff.cuni.cz/~komarek">doc. Arnošt Komárek</a>).<br>
(k Hrátkam s R sú potrebné datove súbory: <a href = "NMSA230/auta2004.dat">auta2004.dat</a>, <a href = "NMSA230/auta2004.csv">auta2004.csv</a> a <a href = "NMSA230/auta2004.xls">auta2004.xls</a>)
</li>
</ul>

<br>
<b>Užitočné študijné materiály pre prácu s programom <i>R</i></b><br>
<ul>
<li>Bína, V., Komárek, A. a Komárková, L.: <i>Jak na jazyk R.</i>  (<a href = "NMFM301/Rmanual2.pdf">PDF súbor</a>)</li>
<li>Komárek, A.: <i>Základy práce s R.</i>  (<a href = "http://msekce.karlin.mff.cuni.cz/~komarek/vyuka/dataRko/Rmanual1.pdf">PDF súbor</a>)</li>
<li>Kulich, M.: <i>Velmi stručný úvod do R.</i> (<a href = "NMFM301/uvodr.pdf" >PDF súbor</a>)</li>
<li>De Vries, A. a Meys, J.: <i>R for Dummies.</i> (ISBN-13: 978-1119055808) </li>		
</ul>

<br><br>

<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<hr size="3" width="100%" noshade style="color:#440000" align="left" />

### <font color = "#880000"><b>1. Základné grafické nástroje v programe R</b></font>

V programe R je k dispozícii veľký výber rôznych funkcii a príkazov určených k vytváraniu variabilných grafických výstupov.
Dalšíe dodatočné príkazy a funkcie je možne získať pri rozšírení štandardnej inštalácie nainštalovaním odatočných balíčkov (packages) - tie sú väčšinou špecificky zamerané na konkrétnu oblasť, 
balíček často poskytuje komplexnú sadu nástrojov na riešenie určitého špecifického problému. <br>

Okrem toho je samozrejme možné vytvárať vlastné príkazy a funkcie a defaultné grafické nástroje v programe R v mnohých smeroch modifikovať, alebo úplne pozmeniť, vylepšiť a zdokonaliť. 
Grafické funkcie v programe R možeme podľa spôsobu fungovania začleniť do troch základných kategórii: 

<ol>
<li><font color = "#880000"><b>Funkcie, ktoré vytvárajú nové grafické rozhranie</b></font><br>
Pri volaní ktorejkoľvek fukcie z tejto kategórie automaticky dôjde k vytvoreniu nového grafického okna (graph window) v ktorom sa vykresli 
samotný výsledný obrázok (graf). Toto okno je ponechané ako aktívne 
a pomocou ďalších funkcii z druhej skupiny (viď nižšie) je možné dopĺňať ďalšie objekty do už existujúceho obrázku, prípadne meniť 
rôzne nastavenia a vlastnosti. <br>

Základné príkazy (napr.): `plot()`, `dotchart()`, `hist()`, `barplot()`, `pie()`, `boxplot()`, `pairs()`, atď.;<br><br>

</li>

<li><font color = "#880000"><b>Funkcie, ktoré dopĺňajú již vytvorený graf</b></font><br>
Do druhej kategórie patria funkcie a príkazy, ktoré fungujú len v prípade, že bola pred ich použitím zavolaná nejaké  
funkcia z prvej kategórie a bolo tak vytvorené grafické okno, ktoré je ponechané stále aktívne. Pomocou príkazov a funkcii z tejto kategórie je možné dopĺňať 
ďalšie (často netriviálne) objekty do už existujúceho grafu (grafického okna - graph window). <br>

Základné príkazy (napr.): `points()`, `lines()`, `abline()`, `text()`, `legend()`, atď.;<br><br>
</li>

<li><font color = "#880000"><b>Funkcie určené na manipuláciu s grafmi a grafickými oknami</b></font><br>
Do tejto kategórie patria funkcie a príkazy, ktoré primárne nie sú schopné vytvárať obrázok, ani dopĺňať 
objekty do už existujúceho obrázku, ale služia na základnú manipuláciu s vytvorenými grafickými oknami (napr. 
uloženie vykresleného obrázku do rozných typov súboru, kombinácia a rozloženie niekoľkýh grafov v jednom grafickom okne, vytvorenie nového okna, zatvorenie aktívneho okna a pod.)<br>

Základné príkazy (napr.): `dev.new()`, `X11()`, `dev.off()`, `postscript()`, `pdf()`, `png()`, `par()`, `layout()`, atď.;<br><br>
</li>
</ol>

Pomocou R helpu postupne zistite, k čomu jednotlivé príkazy a funkcie slúžia, ako sú implementované, aké dodatočné parametre je možné pri volaní funkcie 
využiť a každú z uvedených funkcii použijte aspoň v jednom grafe, ktorý vytvoríte samostatne. <br>

Niekoľko názorných príkladov, ktoré využívajú niektoré z uvedených funkcii, sú uvedené nižšie.
Všimnite si aj úlohu dodatočných parametrov, ktoré sa pri volaní konkrétnej funkcie spomínaju. <br>

Kvalitný obrázok (graf), ktorý je vhodný na použitie v reporte, alebo prezentácii, nie je takmer nikdy možné získať pouze jednoduchým zavolaním defaultnej funkcie. Väčšinou je potrebná 
dodatočná práca minimálne s vhodným popisom na jednotlivých osách, prípadne dostatočne podrobnou legendou, ktorá pomôže pri celkovom porozumení vyobrazeného grafu.<br><br>

<hr size="3" width="100%" noshade style="color:#440000" align="left" />

#### Príklad 1 | datový súbor 'mtcars'

Datový súbor 'mtcars', ktorý je štandardne k dispozícii v klasickej inštalácii programu R obsahuje údaje o 32 rôznych automobiloch predávaných v USA (typ auta, motoru, spotreba, atď.).
Zaujíma nás spotreba auta - premenná označená ako `mpg` (miles per gallon) a chceme graficky zobraziť niektoré základne charakteristiky o tejto premennej. 

Defaultné použitie funkcie `plot()` by vyzeralo takto: 
```{r, fig.width = 10}
plot(mtcars$mpg)
```

Celková poskytnutá informácia je ale hodne malá, takmer žiadna. Graf je potrebné vo viacerých ohľadoch vylepšiť. Jedna z možností je napríklad takáto: 

```{r, fig.width = 10}
x <- mtcars[order(mtcars$mpg),] # sort by mpg
x$cyl <- factor(x$cyl) # it must be a factor
x$color[x$cyl==4] <- "red"
x$color[x$cyl==6] <- "blue"
x$color[x$cyl==8] <- "darkgreen"  
dotchart(x$mpg,labels=row.names(x),cex=.7,groups= x$cyl,
    main="Gas Milage for Car Models\ngrouped by cylinder",
   xlab="Miles Per Gallon", gcolor="black", color=x$color)

c4 <- mean(mtcars$mpg[mtcars$cyl == 4])
c6 <- mean(mtcars$mpg[mtcars$cyl == 6])
c8 <- mean(mtcars$mpg[mtcars$cyl == 8])

lines(c(c8, c8), c(1, 14), col = "darkgreen", lwd = 2)
lines(c(c6, c6), c(17, 23), col = "blue", lwd = 2)
lines(c(c4, c4), c(26, 36), col = "red", lwd = 2)
```

Robustnejsie charakteristiky dostaneme jednoducho pomocou príkazu `boxplot()` v ktorom zohľadníme tri rozličné kategórie podľa celkového počtu válcov v danom aute - premenná označená ako `cyl`. 

```{r, fig.width = 10}
boxplot(mpg ~ cyl, col = c("red", "blue", "darkgreen"), data = mtcars, xlab = "Počet válcov", ylab = "Spotreba [miles per gallon]")
```


Alternatívný náhľad dostaneme prostredníctvom matice scatterplotov, pomocou príkazu `pairs()` a s využitím niektorých ďalších (numerických, resp. spojitých) premenných:

```{r, fig.width = 10}
pairs(mtcars[,c(1,3,4,6)], col=mtcars$cyl, pch = mtcars$am)
```

Sofistikovanejšie verzie aj s odhadom hustoty a regresnej závislosti možeme konštruovať pomocou knižnice `library(car)` príkazom `scatterplot.matrix()`:

```{r, message=F, warning=F, fig.width = 10}
panel.hist <- function(x, ...)
{
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(usr[1:2], 0, 1.5) )
    h <- hist(x, plot = FALSE)
    breaks <- h$breaks; nB <- length(breaks)
    y <- h$counts; y <- y/max(y)
    rect(breaks[-nB], 0, breaks[-1], y, col = "cyan", ...)
}

panel.cor <- function(x, y, digits = 2, prefix = "", cex.cor, ...)
{
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(0, 1, 0, 1))
    r <- abs(cor(x, y))
    txt <- format(c(r, 0.123456789), digits = digits)[1]
    txt <- paste0(prefix, txt)
    if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)
    text(0.5, 0.5, txt, cex = 2)
}

pairs(~mpg+disp+drat+wt + cyl, data=mtcars,  lower.panel=panel.smooth, upper.panel = panel.cor, diag.panel = panel.hist, pch = 21)
```

Existujú samozrejme mnohé iné možnosti a ďalšie grafiké nástroje v Rku, pomocou ktorých vytvoriť 'case-specific' obrázky a grafy. 
Hlavný dôraz je pritom kladený na vizuálnu stránku, graf by mal dostatočne názorne zobrazovať podstatnú štruktúru datového súboru. 

V prípade menšieho počtu premenných je celkom zaujímavou možnosťou aj zobrazenie marginálnych hustot pre nejaké dve konkrétne veličíny (z dôvodu 
obmedzeného vnímania viac-rozmerných grafov sa väčšinou nepoužíva viac, ako dve veličiny súčastne): 

```{r, fig.width = 10}
library(MASS)
library("RColorBrewer")
colors <- brewer.pal(5, "Reds")

z <- kde2d(mtcars[,1], mtcars[,4], n=5)

plot(mtcars[,c(1,4)], xlab="Miles per Galon", ylab="Horse Power", pch=21, bg = "yellow")
contour(z, drawlabels=FALSE, nlevels=4, col=colors, add=TRUE)
```

Knižnica `MASS` je potrebná k spočítaniu jadrového odhadu dvojrozmernej hustoty (príkaz `kde2d()`) a knižnica `RColorBrewer` je potrebná na vytvorenie farebnej palety, podľa ktorej 
sú vyfarbené kontúry. <br><br>

Komplexnejší obrázok s dvoma rôznymi osami y (ľavá os y pre celkovú spotrebu a pravá os y pre výkon). 

```{r, fig.width = 10}
par(mar = c(5, 4, 4, 4) + 0.3)
x <- mtcars$wt
plot(mtcars$mpg ~ x, data = mtcars, pch = 21, bg = "lightblue", cex = 0.8, xlim = c(1, 5.5), xlab = "Celková hmotnosť", ylab = "")
lines(lowess(mtcars$mpg ~ mtcars$wt), col = "black", lwd = 2)

mtext("Spotreba [miles per gallon]" ,side=2,line=3, col = "black")
axis(2,col="black",col.axis="black")

par(new=TRUE)


plot(mtcars$hp ~ x, axes = FALSE, bty = "n", xlab = "", ylab = "", type = "p", col ="red", ylim = c(min(mtcars$hp), max(mtcars$hp)), lwd = 2, cex = 0.5, xlim = c(1, 5.5))
lines(lowess(mtcars$hp ~ x), col = "red", lwd = 2)
axis(4,col="red" ,col.axis= "red")

mtext("Výkon [horse power]",side=4,line=3, col = "red")

for (i in 1:50){
  lines(c(1 + i * 4.5/50, 1 + i * 4.5/50), c(50, 340), col = "gray")
}
```



#### <font color = "#880000"><b>Boxploty</b></font>

Predstavu o štruktúre datového súboru získame (aj keď len v určitej obmedzenej miere) aj pomocou boxplotov, ako už bolo ukázane pre celkovú spotrebu v závislosti na počte válcov. 
Boxploty však môžu obsahovať aj komplexnejšiu informáciu o nejakej veličine, resp. o nejakých veličinách. 

```{r, fig.width = 10}
boxplot(mpg ~ cyl, col = brewer.pal(3, "Blues"), xlab = "number of cylinders", ylab = "miles per galon", main= "", data = mtcars)
```

prípadne verzia, ktorá zohľadňuje dve rôzne kategorické premenné (v tomto konkrétnom prípade spotrebu udávanu v míľach prejdených 
na jeden galón a identifikátor automatickej prevodovky: <i>Automatic = 0</i> a <i>Manual = 1</i>).

```{r, fig.width = 10}
boxplot(mpg ~ cyl + am, col = c(brewer.pal(3, "Greens"), brewer.pal(3, "Blues")), xlab = "No. of cylinders (vs.) Auto Transmission Indicator", data = mtcars)
```


Alebo dokonca zložitejší prípad zobrazujúci spotrebu v závislosti na dvoch rôznych faktoroch a 95% konfidenčným intervalom pre skutočnú hodnotu 
médianu (s voľbou parametru `notched = TRUE`). 

```{r, fig.width = 10, warning = FALSE}
boxplot(mpg ~ cyl * am, col = c(brewer.pal(3, "Greens"), brewer.pal(3, "Blues")), xlab = "Number of Cylinders", ylab = "Miles per Galon | Automatic Transmission", main= "", notch = T, data = mtcars)
```

Alebo celkom sofistikovany 'histogram', ktorý inkorporuje aj odhad hustoty (pomocou príkazu `vioplot()` z knižnice 'vioplot'. 
```{r, message=F, warning=F}
library(vioplot)
```

```{r, fig.width = 10}
x1 <- mtcars$mpg[mtcars$cyl==4]
x2 <- mtcars$mpg[mtcars$cyl==6]
x3 <- mtcars$mpg[mtcars$cyl==8]
vioplot(x1, x2, x3, names=c("4 cyl", "6 cyl", "8 cyl"), col="gold")
title("Violin Plots of Miles Per Gallon")
```

S využitím dodatočnej knižnice `MASS` je možné zavolať funkciu `parcoord()` ktorá je užitočna, keď chceme vizuálne posúdiť mieru korelácie 
medzi jednotlivými sledovanými premennými. Ako by ste nasledujúci graf interpretovali? Resp. aké závery je možné z tohto grafu vyvodiť?

```{r, fig.width = 10}
library(MASS)
attach(mtcars)
colorVector <- rep("brown", dim(mtcars)[1])
colorVector[am == 0] <- "brown1"
colorVector[cyl == 6] <- "blue4"
colorVector[cyl == 6 & am == 0] <- "blue1"
colorVector[cyl == 4] <- "darkgreen"
colorVector[cyl == 4 & am == 0] <- "green"
parcoord(mtcars, col = colorVector, lty = gear)
```

<hr size="3" width="100%" noshade style="color:#440000" align="left" />

#### Príklad 2 | datový súbor 'Orange'

V druhom príklade použijeme datový súbor 'Orange', s ktorým sme už pracovali. V datasete sú zaznamenané 
informácie o piatich druhoch pomarančovníkoch - zaznamenaváme vek stromu v dňoch a priemer kmeňa v cm. <br><br>

Najprv využijeme štandardný príkaz `plot()` a následne sa pokusíme graf vylepšiť pomocou využitia informácie, ktorú o datach máme (viď R help `?Orange`) a dodatočných funkcii z druhej kategórie, prípadne niektorých prametrov, 
pomocou ktorých sú jednotlivé funkcie implementováne. 

```{r, fig.width = 10}
plot(Orange[,"circumference"] ~ Orange[,"age"])
```

A teraz vylepšená (snáď krajšia) verzia toho istého grafu:

```{r, fig.width = 10}
plot(0,0, xlim = c(0, 1800), ylim = c(0, 250), pch = "",
          xlab = "age [days]", ylab = "circumference [cm]", main = "Orange Trees")
for (i in 1:5){
  points(Orange[Orange[,1] == i,3] ~ Orange[Orange[,1] == i,2], pch = 21, bg = i)
  lines(Orange[Orange[,1] == i,3] ~ Orange[Orange[,1] == i,2], col = i)
}
legend(0, 250, legend = c("Tree type #1", "Tree type #2", "Tree type #3", "Tree type #4", "Tree type #5"), 
               col = "black", bg = "lightgray" , pch = 21, lty = c(1,1,1,1,1), pt.bg = 1:5)
```

<hr size="3" width="100%" noshade style="color:#440000" align="left" />

#### Príklad 3 | multiple plot output

Pomocou príkazov `par()` a `layout()` je možné kombinovať niekoľko grafov/obrázkov v jednom grafickom okne. 

```{r, fig.width = 10}
par(mfrow = c(1,2))
hist(Orange[,"circumference"], col = "lightblue", xlab = "Circumference [cm]", ylab = "Frequency", freq = F, main = "")
lines(density(Orange[,3]), col = "red", lwd = 2, lty = 2)
barplot(Orange[,3], col = sort(rep(1:5,7)), xlab = "Measurements by Trees", ylab = "Circumference [cm]")
```


<br><br>

#### <font color = "#880000">Užitočné</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
Program R poskytuje obrovskú škálu nástrojov a funkcii k vytváraniu a modifikovaniu grafickych výstupov. Ako názorná ukážka rôzných možnosti, ktoré sú k dispozícii, môže poslúžiť jednoduché demo, ktoré je defaultne k dispozícii v Rku pod príkazom `demo("graphics")`. <br>

Analogickym spôsobom funguje demo ku všetkym knižniciam, ktoré su v Rku nainštalované (príkaz `demo()` a následne `demo("***")`, kde namiesto `***` je potrebné dopĺniť názov príslušného balíčku - package. <br>

Každá zo spomínaných funkcii je implementována s dodatočnými parametrami, ktore menia jej defaultne nastavenie a ovplyvňujú finálny vysledok 
výsledného grafu (viď help k príslušnej funkcii). Je dôležité tieto parametre poznať a náležite ich pri práci aj využívať. 
<hr size="3" width="100%" noshade style="color:#440000" align="left" /><br><br>


### <font color = "#880000"><b>2. Obrázky a grafy pre kategorické premenné </b></font>
V prípade práce s kategorickými premennými je užitočné uvažovať nad grafmi, ktoré poskytnú informáciu o zastúpení jednotlivých kategórii - teda relatívne počty. 
K tomuto účelu je v programe R niekoľko funkcii. <br><br>

#### Príklad 3 | datový súbor 'MplsStops' (knižnica 'carData')

Data obsahujú informáciu o zastavených vodičoch políciou v Mineapolise v USA v roku 2017 (viď R help k príslušným datam). 

```{r, fig.width = 10}
library("carData")
table(MplsStops$race)

library("RColorBrewer")
colors <- brewer.pal(8, "Reds")

par(mfrow = c(1,2))
pie(table(MplsStops$race), col = colors)
barplot(table(MplsStops$race), col = colors)
```




#### <font color = "#880000">Užitočné</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<ul>
<li> Funkcia `barplot()` aj funkcia `pie()` majú v R širšie využitie a konkrétna implementácia závisí na hodnotách voliteľných parametroch. </li>
<li> S pomocou R helpu k jednotlivých funkciám vyskúšajte použitie na vlasných datach. </li>
</ul>
<hr size="3" width="100%" noshade style="color:#440000" align="left" /><br><br>





### <font color = "#880000"><b>3. Príprava obrázkov do reportu/prezentácie </b></font>

Z datovych súborov, ktoré sú defaultne k dispozícii v štandardnej inštalácii programu R (príkaz `data()`) si vyberte jeden datový súbor 
a pomocou grafických nástrojov zostrojte niekoľko obrázkov, ktoré nejakým spôsobom vypovedajú o nameraných hodnotách. Pomocov dvojice príkazov  `pdf()` a `dev.off()` získame výsledný grafický výstup vo foprmáte PDF (ktorý sa automaticky vytvorí pri volaní funkcie `pdf()` a ukonči/zprístupni volaním funkcie `dev.off()` na záver).

```{r, eval=FALSE}
pdf("obrazok1.pdf", width = 6, height = 4)
par(mfrow = c(1,2))
hist(Orange[,"circumference"], col = "lightblue", xlab = "Circumference [cm]", ylab = "Frequency", freq = F, main = "")
lines(density(Orange[,3]), col = "red", lwd = 2, lty = 2)
barplot(Orange[,3], col = sort(rep(1:5,7)), xlab = "Measurements by Trees", ylab = "Circumference [cm]")
dev.off()
```


Pre prácu s LaTeXom je užitočné poznať aj príkaz na vytvorenie obrázku/grafu vo vektorovej grafike, ktorý je všeobecne kvalitnejší. 
Slúži k tomu príkaz `postscript()`. Dodatočné grafické parametre sú totožné, ako pri vytváraní výstupov vo formáte PDF, teda príkaze `pdf()`:

```{r, eval=FALSE}
postscript("obrazok1.eps", width = 6, height = 4)
par(mfrow = c(1,2))
hist(Orange[,"circumference"], col = "lightblue", xlab = "Circumference [cm]", ylab = "Frequency", freq = F, main = "")
lines(density(Orange[,3]), col = "red", lwd = 2, lty = 2)
barplot(Orange[,3], col = sort(rep(1:5,7)), xlab = "Measurements by Trees", ylab = "Circumference [cm]")
dev.off()
```


<br><br>

#### <font color = "#880000">Užitočné</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<ul>
<li> Ako už bolo uvedené, v programe R je k dispozícii celá škála rôznych balíčkov a knižníc, z ktorých su mnohé
venované aj grafike. Podrobnosti sú napr. na webovej stranke <a href = "http://www.r-graph-gallery.com">http://www.r-graph-gallery.com</a>.
</li>
<li> Vôčšína z uvedených príkladov vyžaduje inštaláciu potrebnej knižnice (package) - inštalácia pomocou príkazu `install.packages()` a 
následna inicializácia knižnice pomocou príkazu `library()`. 
</li>
</ul>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<br><br>


### <font color = "#880000"><b>4. Knižnica ggplot2 </b></font>

Alternatívu ku klasickým grafickým nástrojom, ktoré sú k dispozícii v programe R, ponúka dodatočna knižnica `ggplot2`, ktorú naištalujete a inicializujete štandardnými príkazmi

```{r, fig.width = 10, message = FALSE, eval = FALSE}
install.packages("ggplot2")
```

```{r, fig.width = 10, message = FALSE}
library(ggplot2)
```

Základnou funkciou v tejto knižnici je funkcia `qplot()`, ktorá na rozdiel od štandardnej funkcie `plot()`, ponúka ďaleko väčšie možnosti 
pri vytváraní grafov a obrázkov (pozri help `?qplot()`).  

V datovom súbore `mtcars` najprv upravíme niektoré premenné - faktorizujeme ich a priradíme príslušne názvý jednotlivých úrovni.

```{r, fig.width = 10, message = FALSE}
mtcars$gear <- factor(mtcars$gear,levels=c(3,4,5), labels=c("3gears","4gears","5gears")) 
mtcars$am   <- factor(mtcars$am,levels=c(0,1), labels=c("Automatic","Manual")) 
mtcars$cyl  <- factor(mtcars$cyl,levels=c(4,6,8),  labels=c("4cyl","6cyl","8cyl"))
```

Následne už možeme použiť funkciu `qplot()` a vykresliť odhad hustoty pre spotrebu (miles per gallon) v závislosti na počte prevodových stupňov (premenná `gear`). 

```{r, fig.width = 10, message = FALSE}
qplot(mpg, data=mtcars, geom="density", fill=gear, alpha=I(.5), main="Distribution of Gas Milage", xlab="Miles Per Gallon",  ylab="Density")
```

Pomocou tej istej funkcie `qplot()`, ale s inou voľbou parametru `geom = "..."`, je možne celkovo meniť vzhľad a typ výsledného grafu. 

```{r, fig.width = 10, message = FALSE}
qplot(gear, mpg, data=mtcars, geom=c("boxplot", "jitter"), fill=gear, main="Mileage by Gear Number", xlab="", ylab="Miles per Gallon")
```

Prípadne vykresliť regresnú závislosť spotreby na váhe automobilu (aj s príslušnými pásmi spoľahlivosti pre regresnú přímku). 

```{r, fig.width = 10, message = FALSE, warning = FALSE}
qplot(wt, mpg, data=mtcars, geom=c("point", "smooth"), method="lm", formula=y~x, color=cyl, main="Regression of MPG on Weight", xlab="Weight", ylab="Miles per Gallon")
```   
   
<br><br>   
   
#### <font color = "#880000">Užitočné</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
Knižnica `ggplot2` funguje na princípe postupných vrstiev (layers), v ktorých sa vykresľuje výsledný graf. Jednotlivé vrstvy sa prídávajú pomocou 
vhodných príkazov, ako napr. `geom_points()`, `geom_abline()`, `geom_area()` `geom_bar()`, `geom_contour()`, `geom_polygon()`, atď. (zoznam napr. na stránke <a href = "http://sape.inf.usi.ch/quick-reference/ggplot2/geom">http://sape.inf.usi.ch/quick-reference/ggplot2/geom</a>). 

Jednoduchý príklad s využitím niekoľkých vrstiev: 

```{r, fig.width = 10, message = FALSE, warning = FALSE}
dataSum <- plyr::ddply(mtcars, "gear", plyr::summarise, mean = mean(mpg), sd = sd(mpg))

ggplot() +
  geom_point(data = mtcars, aes(x = gear, y = mpg)) +
  geom_point(data = dataSum, aes(x = gear, y = mean), colour = 'red', size = 3) +
  geom_errorbar(data = dataSum, aes(x = gear, y = mean,  ymin = mean - sd, ymax = mean + sd), colour = 'red', width = 0.4) +
  ggtitle("Car consumption summary given the number of gears")
``` 

<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<hr size="3" width="100%" noshade style="color:#440000" align="left" /><br><br>   



## <font color = "#880000">Domáca úloha</font>
### (Deadline: 4. cvičenie | St: 20.11.2019)

Použijte datový súbor, ktorý ste si vygenerovali vrámci predchadzajúcich samostatných úkolov. Uvažujte popisné charakteristiky, 
ktoré ste si zvolili a spočítali a dopľte tieto výberové charakteristiky vhodnými obrázkami/grafmi. 

<ul>
<li> Vytvorte aspoň jeden graf zobrazujúci scatterplot bodov. Graf vhodným spôsobom (napr. rôzne barvy, rôzne symboly pre jednotlivé body a pod.) doplnte o dalšie informácie obsažené v datach. </li>
<li> Vytvorte vhodný obrázok pre aspoň jednu kategorickú premennú.</li>
<li> Výsledne obrázky si pomocou príkazu "pdf()" uložte na disk ako PDF súbory. </li>
</ul>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<hr size="3" width="100%" noshade style="color:#440000" align="left" />

<br><br>

</td></tr></table>
<br><br><br><br><br>