Hlavní navigace

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

Jáchym Čepický 2. 6. 2004

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.

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Lupa.cz: Není sleva jako sleva. Jak obchodům nenaletět?

Není sleva jako sleva. Jak obchodům nenaletět?

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Podnikatel.cz: EET zvládneme, budou horší zákony

EET zvládneme, budou horší zákony

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky