Motivace
Přišla za mnou kamarádka, že by potřebovala do své diplomové práce udělat pár grafů. Data prý má, jenom by potřebovala trošku pomoct s těmi grafy. Ukázalo se, že grafů bude cca dvě stě kousků a mně se, při představě proklikaných nocí, začala lehce třepat kolena. Když se ještě vytasila s tím, že by nad některými sloupečky měla být nějaká písmenka a nad některými ne, začala se mi kolena třepat již výrazně více. Záhy jsem si uvědomil, že má-li náš vztah přežít, musím na to jít z gruntu jinak. I vzpomněl jsem si na články od Rada Bonka, nelenil jsem a začal pronikat do tajů tohoto programu. Vyplatilo se. Diplomka je v tisku a náš vztah zachráněn.
Vocogou?
Rko je programovací jazyk a prostředí pro statistické počty a grafy. Vychází z jazyka S, který byl vyvinut v Bellových laboratořích Johnem Chambersem a jeho kolegy.
Rko je asi nejpoužívanější nekomerční produkt, který se může směle postavit např. komerčnímu SASu. Běhá na všech důležitých platformách. Díky široké uživatelské základně je k dispozici množství přídavných balíčků, které jeho schopnosti ještě umocňují. U nás je Rko velmi oblíbené zejména mezi botaniky na úplně jiné platformě, než je GNU/Linux ;-)
Tento článek by však měl být o grafech, což je jenom malá část schopností Rka. Dobrým úvodem do Rka obecně může být Úvod k S pana Petra Šmilauera.
Jednoduchý začátek
Začneme poměrně jednoduše. Předpokládám základní znalost Rka, kterou jste bezpochyby nabyli pečlivou četbou zmiňovaných článků Rada Bonka.
Z připraveného souboru načteme data, se kterými budeme pracovat. Soubor obsahuje data výskytu deseti jevů (např. stanovištních typů rostlin) na třech lokalitách.
V prvním kroku spustíme Rko (příkazem R) a data načteme. Data z externího souboru se načítají příkazem read.table
, který může mít množství parametrů. Nás zajímá především parametr header
, který nastavíme na hodnotu TRUE
. Rko má velmi dobře propracovanou nápovědu. Tu získáte ke všem příkazům >help(jmeno_prikazu), tedy například > help(read.table) vás dopodrobna seznámí s modulem pro čtení dat z externích zdrojů. Určitě stojí také za zmínku příkaz example()
, ke kterému se uchyluji pokaždé, když marně hledám inspiraci. Schválně vyzkoušejte, co udělá example(barplot)
. Nyní již tedy víme, jak bude příkaz vypadat:
> read.table("rdata.txt", header=T)
Při práci s Rkem si musíte rychle zvyknout na jednu věc:
Vše může být pole.
Vše můžete načítat do proměnných. Proměnná může obsahovat sekvenci čísel nebo textových řetězců. Pole mohou být vícerozměrná.
Tím, že jsme provedli příkaz read.table
, se dohromady nic zvláštního nestalo. Data se nám jenom vytiskla na obrazovku. My je ale můžeme načíst do proměnné, a to se v Rku dělá přiřazovacím znaménkem ‚ <-
‘. Proto nyní data načteme do proměnné skupiny
:
> skupiny<-read.table("rdata.txt", header=T) > skupiny lokalita1 lokalita2 lokalita3 1 - čerstvé, bohaté 2.569 0.857 1.573 2 - nitrofilní 1.468 0.000 0.000 3 - velmi chudé 11.835 2.571 2.022 4 - suché, chudé 0.826 0.571 0.449 5 - mírně vlhké, chudé 43.394 2.571 28.090 6 - čerstvé, středně bohaté 36.789 82.857 59.775 7 - střídavě vlhké 3.119 7.429 7.640 8 - vlhké 0.000 0.571 0.449 9 - bohaté 0.000 2.571 0.000 10 - rašelinné 3.119 7.429 7.640 >
Na rozdíl od polí, která známe z běžných programovacích jazyků, má první prvek v poli (v tomto případě v matici) číslo 1. Formát u matice je jméno[řádek,sloupec]
:
> skupiny[0,0] NULL data frame with 0 rows > skupiny[1,1] [1] 2.569 > skupiny[1,] lokalita1 lokalita2 lokalita3 1 - čerstvé, bohaté 2.569 0.857 1.573
Jenom snad krátce zabruslím na tenký led statistické analýzy:
> summary(skupiny) lokalita1 lokalita2 lokalita3 Min. : 0.0000 Min. : 0.0000 Min. : 0.000 1st Qu.: 0.9865 1st Qu.: 0.6425 1st Qu.: 0.449 Median : 2.8440 Median : 2.5710 Median : 1.798 Mean :10.3119 Mean :10.7427 Mean :10.764 3rd Qu.: 9.6560 3rd Qu.: 6.2145 3rd Qu.: 7.640 Max. :43.3940 Max. :82.8570 Max. :59.775 >
Konečně nějaký graf
Rko nám poskytuje nepřeberné množství možností tvorby grafů. Standardně mají výstup v grafickém okně. Další možností je přesměrování výstupu do PostScriptového souboru a milou vlastností je export přímo do LaTeXu. Tím se ovšem zabývat nebudeme.
Předtím, než začneme s daty pracovat, je musíme převést na matici. To se dělá příkazem
> skupiny<-as.matrix(skupiny)
Stejně tak jsme je mohli tímto způsobem zajistit už při nahrávání ze souboru:
> skupiny<-as.matrix(read.table("rdata.txt", header=T))
První sloupcový graf pak vytvoříme příkazem
> barplot(skupiny)
Dostali jsme sloupcový graf, v němž jsou jednotlivé lokality zastoupeny vlastním sloupcem, který je poměrně rozdělen podle zastoupení skupin rostlin.
Zajímavější by ale mohlo být znázornění jednotlivých sloupců vedle sebe, což zajistíme nastavením hodnoty parametru beside
na TRUE
:
> barplot(skupiny, beside=T)
Co když ale chceme vytisknout sloupcový graf jen pro jednu lokalitu? Možností je víc. Buď to uděláme úplně stejně, jako bychom si tiskli data z jedné lokality:
> skupiny[,1]
čerstvé, bohaté nitrofilní velmi chudé
2.569 1.468 11.835
suché, chudé mírně vlhké, chudé čerstvé, středně bohaté
0.826 43.394 36.789
střídavě vlhké vlhké bohaté
3.119 0.000 0.000
rašelinné
3.119
> barplot(skupiny[,1], beside=T)
A nebo si vytvoříme novou proměnnou lokalita1
a dál budeme pracovat s ní:
> lokalita1 <- skupiny[,1] > barplot(lokalita1, beside=T)
Můžete již vidět, že Rko se snaží vyplnit i legendu na ose x. K tomu se ale dostaneme v dalším pokračování, ve kterém hned na začátku začneme vyšperkovávat náš grafík.