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?
4. 11. 2009 9:47
Lubo (neregistrovaný)

Ahoj, mohl by mi někdo poradit, jak mám nasázet dolní index do popisku grafu, osy? Já na to sám nemůžu přijít. Nebo kde to aspoň hledat.

Díky moc za odpovědi.

22. 12. 2004 22:10
jan (neregistrovaný)

Prosím vás potřeboval bych nutně vědět jak dostanu chybové úsečky do sloupcového grafu.