Hlavní navigace

Tvorba grafů pomocí programu "R": pokročilé funkce

Jáchym Čepický

V tomto pokračování se již dostáváme k pokročilejším funkcím při tvorbě grafů. Ukážeme si, jak používat další funkce místo zabudovaných parametrů. Podíváme se na možnosti ovlivňování barevného ladění jednotlivých prvků a také si ukážeme, jak si udělat tu správnou legendu.

Grafík jako vínko

Každý pořádný graf musí mít nadpis, popisy všech os a legendu. Na všechno jsou ve funkci barplot parametry. Začneme od začátku:

> barplot(lokalita1, beside=T, main="Zastoupeni ve skupine 1", sub="(c)
2004", xlab="Skupiny rostlin", ylab="[%]", legend=T) 

Čtvrtý sloupcový graf

V grafu můžeme upravovat měřítko na osách. Potřebné hodnoty můžeme zjistit např. funkcí max(skupiny). Vidíme také, že použití popisku na ose x je vysloveně nevhodné. Buď můžeme tyto popisky úplně vynechat, nebo si vytvoříme novou proměnnou tvořenou vektorem popisků k ose x. Vektory se tvoří pomocí funkce  c():

> popisky<-c(1, 2, 4, 5, 'cos', 'to', 'janku', 'a', 'tak', 'dál')
> osay<-max(lokalita1)
>  barplot(lokalita1, beside=T, main="Zastoupeni ve skupine 1",
sub="(c) 2004", xlab="Skupiny rostlin", ylab="[%]", names.arg=popisky,
ylim=c(0, osay+10)) 

nebo rovnou:

>  barplot(lokalita1, beside=T, main="Zastoupeni ve skupine 1",
sub="(c) 2004", xlab="Skupiny rostlin", ylab="[%]", names.arg=c(1, 2, 4, 5,
'cos', 'to', 'janku', 'a', 'tak', 'dál'), ylim=c(0, max(lokalita1))) 

Pátý sloupcový graf

K základním modifikacím grafu určitě budou patřit i barvy. Podle mě je přednastavená paleta docela fajn, ale najdou se i tací, kteří mají nějakou zcela konkrétní představu. R má v sobě pěknou řádku barev, jejich výpis získáte příkazem colors(). Aby se v tom dalo trošku zorientovat, vytvořil jsem paletu přítomných barev.

S paletou barev pracujeme úplně stejně jako se vším ostatním. V nejjednodušším případě vytvoříme vektorovou proměnnou obsahující vybrané barvy, a ty pak použijeme:

> barvicky<-c('lightblue', 'skyblue', 'RoyalBlue', 'LawnGreen',
'khaki1', 'Yellow', 'Gold1', 'Navy', 'violetred4', 'Plum')
> barplot(lokalita1, beside=T, main="Zastoupeni ve skupine 1", sub="(c)
2004", xlab="Skupiny rostlin", ylab="[%]", names.arg=popisky, legend=T,
ylim=c(0, max(lokalita1+10)), col=barvicky) 

Šestý sloupcový graf

Podobným způsobem, jakým jsme změnili popisky na ose x, můžeme „vpašovat“ i libovolný text do legendy. Nikdo vám nebrání vložit i např. znak pro nový řádek:

> legenda<-c('První skupina', 'druhá skupina', 'třetí skupina',
'čtvrtá skupina', 'pátá skupina', 'šestá', 'sedmá', 'osmá', 'devátá',
'desátá\nje\nnejdelší')
> barplot(lokalita1, beside=T, main="Zastoupeni ve skupine 1", sub="(c)
2004", xlab="Skupiny rostlin", ylab="[%]",names.arg=popisky, ylim=c(0,
max(lokalita1+10)), col=barvicky, legend.text=legenda) 

Tohle všechno je moc fajn, ale když máte v legendě dvacet i více položek, začne vám tato přesahovat do sloupců. Nešlo to nějak zařídit, aby položky v legendě byly uspořádány např. do třech sloupečků?

Jasně že šlo :o) K tomu se podíváme na novou funkci. A překvapivě to bude funkce legend().

Hrátky s legendou

Legendu můžete tvořit několika způsoby. Buď využijete parametr přímo z nějaké té funkce (např. dosud jsme legendu tvořili a upravovali pomocí parametru legend.text ve funkci barplot()), nebo použijete vlastní funkci legend(). A tím se budeme zabývat nyní.

Z nápovědy k funkci legend snadno vyčteme vše potřebné. Vše je velmi jednoduché a transparentní.

legend(x, y, legend, fill, col = "black", lty, lwd, pch, angle = NULL,
density = NULL, bty = "o", bg = par("bg"), pt.bg = NA, cex = 1, xjust = 0,
yjust = 1, x.intersp = 1, y.intersp = 1, adj = 0, text.width = NULL, merge
= do.lines has.pch, trace = FALSE, plot = TRUE, ncol = 1, horiz = FALSE) 

První dva parametry značí umístění legendy v oblasti pro graf. Čísla se zadávají jakoby na osách. Jako další nás zajímá parametr col, do kterého můžeme umístit buď jednu barvu, nebo celé pole barev. Parametr lty značí všude v Rku typ linie. Zadává se opět jako jedno číslo, nebo pole. lwd značí šířku linie, parametry

angle a density jsou určeny k tomu, když chcete místo barviček symboly šrafovat. Parametr cex slouží k zadání velikosti písma. Zadává se poměrně vůči nějaké „normální“ velikosti. cex=.75 proto zařídí, že písmo v legendě bude velké 75 % velikosti normálního písma. xjust a yjust udávají zarovnání vůči souřadnicím x a y. 0 znamená zarovnat nalevo od bodu, 1 znamená zarovnat napravo a 0.5 na střed.

ncol značí počet sloupečků v legendě, a pokud je hodnota parametru horiz nastavena na TRUE, bude legenda vysázena horizontálně. Tento parametr „přebije“ hodnotu ncol.

Nadešel tedy čas pro pořádnou legendu. Zahájíme tím, že si definujeme pole s popisky v legendě a pak se mrkneme na naše již definované proměnné:

> legenda<-c('1 - čerstvé, bohaté', '2 - nitrofilní', '3 - velmi
chudé', '4 - suché, chudé', '5 - mírně vlhké, chudé', '6 - čerstvé, středně
bohaté', '7 - střídavě vlhké', '8 - vlhké', '9 - bohaté', '10 -
rašelinné')
> barvicky
 [1] "lightblue" "skyblue" "RoyalBlue" "LawnGreen"  "khaki1"
 [6] "Yellow"    "Gold1"   "Navy"      "violetred4" "Plum"
> legenda
 [1] "1 - čerstvé, bohaté"    "2 - nitrofilní"
 [3] "3 - velmi chudé"        "4 - suché, chudé"
 [5] "5 - mírně vlhké, chudé" "6 - čerstvé, středně bohaté"
 [7] "7 - střídavě vlhké"     "8 - vlhké"
 [9] "9 - bohaté"             "10 - rašelinné" 

Zobrazíme si graf bez legendy

> barplot(lokalita1, beside=T, main="Zastoupeni ve skupine 1", sub="(c)
2004", ylim=c(0,max(lokalita1+10)), col=barvicky, xlab="Skupiny rostlin",
ylab="[%]", names.arg=popisky) 

A nadefinujeme si slušivou legendičku:

> legend(0, 52.5, legenda, col=barvicky, lty=3, lwd=9, cex=0.75,
yjust=1, ncol=3) 

Sedmý sloupcový graf

Chce to trošku experimentovat, ale výsledek stojí za to.

Pokud se chcete zbavit rámečku okolo legendy, stačí jeho parametry předat pomocí funkce  par():

> legend(1, 52.5, legenda, col=barvicky, lty=3, lwd=9, ncol=3, cex=0.75, bty=par(lty=0)) 

Devátý sloupcový graf

A příště si povíme něco o tom, jak do našeho grafíku vpravit elegantně jakýkoliv textový řetězec na požadované místo. Stranou nezůstane ani otázka použití českých znaků v konečném produktu.

Našli jste v článku chybu?