Tvorba grafů pomocí programu "R": úvod

26. 5. 2004
Doba čtení: 4 minuty

Sdílet

V těchto a minulých dnech jsem měl možnost seznámit se blíže s tvorbou grafů v programu R. Rád bych se s vámi o tyto zkušenosti podělil. Doufám, že se tím otevře cesta potenciálním zájemcům o tento program. Jsou chvíle, kdy se sebelepší tabulkový kalkulátor musí sklonit před sílou Rka. Ale to již předbíhám, takže hurá do toho.

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.

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_pri­kazu), 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)

První sloupcový graf

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)

Druhý sloupcový graf

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í:

bitcoin školení listopad 24

> lokalita1 <- skupiny[,1]
> barplot(lokalita1, beside=T)

Třetí sloupcový graf

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.

Autor článku