Hlavní navigace

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

Jáchym Čepický

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

> 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.

Našli jste v článku chybu?

26. 3. 2007 13:10

uživatel si přál zůstat v anonymitě
Zkus chisq.test()

27. 5. 2004 20:26

Petr (neregistrovaný)

Schopnosti Rka a SASu rozhodne nejsou srovnatelne!!! Nevim, co vsechno delas ve statistice (myslim ve vede), ale ja se obcas snazim. Treba casovky jsou v Rku na vyhozeni a v SASu docela dobry a hodne rozsahly. A doprogramovavat si je? To je asi tak na disertacku, ne... SAS je v hodne vecech lepsi, ale tot otazka a nechci zacinat flamewar... A co jine programky, Xplore, Eview, stata, gauss, ty taky neco umi. Podle me se musi vzit software, ktery zrovna neco umi. Doprogramovavat se neda, to je jas…

Měšec.cz: Sleva na dítě a manželku pro OSVČ je zpět. Ale..

Sleva na dítě a manželku pro OSVČ je zpět. Ale..

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

Přehledná titulka, průvodci, responzivita

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

Recenze Westworld: zavraždit a...

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

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

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

DigiZone.cz: Sat novinky: slovenská TV8 HD i ruský NTV Mir

Sat novinky: slovenská TV8 HD i ruský NTV Mir

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“