ggplot2

Pakett ggplot2:

  • võimaldab vähese vaevaga teha ilusaid jooniseid,
  • toimib andmetabelitega,
  • töötab (semantiliste) kihtide põhimõttel, lisatavate kihtide arv on lõpmatu,
  • sisaldab funktsiooni qplot() ehk quick plot, mis on paketi vaste R-i baasgraafika funktsioonile plot(). Põhjalikumalt ja paindlikumalt võimalik graafikuid kujundada funktsiooniga ggplot()

1. kiht: data & mapping

Kogu ggploti graafik algab alati funktsiooniga ggplot(), mis loob tühja kihi, kus saab täpsustada mida ja millise graafiku osana kuvada.
Seda, kust andmed võetakse, tuleb täpsustada argumendiga data.

Andmestiku tunnuste visualiseerimiseks kasutatakse argumenti mapping ja selle väärtusena funktsiooni aes (aesthetics). aes’i argumentidega (ehk sulgude sees) on omakorda võimalik öelda näiteks, et visualiseeri graafiku x-teljel üht tunnust (x =), y-teljel teist (y =), värvi abil kolmandat (color =), täitevärvi abil neljandat (fill =), kujundi abil viiendat (shape =), suuruse abil kuuendat (size =) jne.

Kui tahame nt küsimustikust x-teljel visualiseerida lemmiklooma kategooriaid, siis täpsustame selle argumendiga mapping = aes(x = lemmikloom).

Kuna me ei ole veel öelnud, mismoodi me lemmiklooma tahame graafikul kuvada (nt kas tulpdiagrammina või pirukana), siis joonistatakse endiselt tühi palett, mille x-teljele on nüüd märgitud lemmiklooma kategooriad.

Nii data’t kui ka mapping’ut on võimalik täpsustada ka hilisemates kihtides, kusjuures argumentide nimed võib ka ära jätta kui järjekord on õige.

2. kiht: geom

2. kiht täpsustab, millist graafikutüüpi mingi tunnuse või tunnuste kuvamiseks kasutada. Seda kihti nimetatakse geom_function’iks. Levinumad geom´id on

  • geom_point,
  • geom_histogram,
  • geom_boxplot
  • geom_bar
  • geom_label
  • geom_text
  • jne.

Nagu öeldud, võib data’t ja tunnuste mapping’ut täpsustada ka geom-kihtides. Näiteks ülal oleva graafiku saame ka sellise koodiga:

Selline vormistus on kasulik eriti siis, kui tahame kujutada samal graafikul näiteks erinevate andmestike või sama andmestiku erinevate alamhulkade tunnuseid. Näiteks võime samal graafikul kujutada lisaks eraldi joonega ainult kohvijoojate vastuste sagedusi. Kuna geom_line on nn kollektiivne geom ehk selle joonistamiseks kasutatakse mitme vaatluse andmeid, siis selleks, et joon oleks ühendatud üle kõikide kategooriate, kasutame aes-funktsiooni sees argumenti group. Kui tahta näidata ainult üht vaatluste gruppi, võib group’i väärtus olla mis tahes konstant, nt 1, 500, “a” vmt.

Kui aga tahta grupeerida vaatlusi mingi andmestiku tunnuse järgi, tuleb group väärtuseks panna seesama andmestiku tunnus ise. Kuvame näiteks nii tee- kui ka kohvijoojate vastused tulpade peal eri värvi joontena.

Võrdle:

3. kiht: scale

3. kiht lubab modifitseerida seda, kuidas mingil kujul graafikul esitamiseks valitud tunnus graafikul täpselt välja näeb. Seda kihti nimetatakse ka scale_function’iks.

scale’iga saab modifitseerida seda elementi, mille kaudu tunnust graafikul kujutatud on, nt scale_x_..., scale_y_..., scale_color_..., scale_fill_..., scale_size_..., scale_shape_... jne.

scale-funktsiooni nime viimane element (üleval märgitud praegu punktiiriga) kirjeldab tunnuse modifitseerimise tüüpi, värviskaalat vms. See, mis argumendid mingil konkreetsel scale-funktsioonil on, sõltub funktsioonist endast. Trüki konsooli nt scale ja vajuta tabulaatorit, et näha erinevaid variante.

Kasutame scale-funktsiooni, et nimetada graafikul ümber lemmiklooma tasemed ning kuvada ka tase “Mulle ei meeldi loomad”, mida keegi vastanutest ei valinud.

Kujutame nüüd graafikul veel täitevärviga (fill) seda, kui suur osa mingi looma valinutest olid tee- ja kui suur osa kohvijoojad. scale-funktsioonis saame näiteks määrata, millist värvipaletti tahaksime tulpade täitevärvi jaoks kasutada.

5. kiht: theme

5. kihil võime täpsustada otseselt andmetega mitteseotud elementide väljanägemist graafikul funktsiooniga theme(). Selliste elementide hulka kuuluvad nt teksti suurus, värv, font, paksus, paiknemine, graafiku tausta värv, graafiku piirjoonte olemasolu, paksus, värv, ruudustiku kuvamine jne. On terve hulk n-ö sisse-ehitatud teemasid, nt theme_bw(), theme_grey(), theme_light(), theme_dark(), theme_minimal(), theme_classic() jne.

Teemat on aga võimalik ka ise kohandada, täpsustades kohandatavaid elemente funktsiooni theme() sees. Kohandatavaid elemente on palju:

axis.___ telgede elemendid
legend.___ legendi elemendid
panel.___ joonise üldala elemendid
plot.___ joonise enda elemendid
jne.

Iga elemendi väljanägemist saab täpsustada ühega neljast element-funktsioonist:
element_blank() - eemaldab mis tahes elemendi täielikult
element_line() - täpsustab joonte väljanägemist
element_rect() - täpsustab piirjoonte ja tausta väljanägemist
element_text() - täpsustab teksti väljanägemist

Näiteks võib teha sellise teemakihi:

Kasutame nüüd objekti p salvestatud graafikut ning lisame sellele loodud teema.

6. kiht: paneelid (facets)

ggploti üks suuri eeliseid on paneelide funktsioon, mille abil on võimalik jagada andmestik ühe või mitme tunnuse järgi osadeks ning kuvada kõikide alamandmestike graafikuid korraga ühel joonisel.

Jagame näiteks tehtud graafiku paneelideks vastajate kursusel osalemise aasta järgi. Kasutame selleks funktsiooni facet_wrap(). Tunnus, mille alusel paneelid tehakse, lisatakse argumendina funktsiooni sisse.

Joonist paneelideks jagav tunnus peab olema funktsioonis kas jutumärkides või kujul ~tunnus (ilma jutumärkideta). Võib jagada ka mitme tunnuse järgi. Sel juhul on funktsiooni sees kas c("esimenetunnus", "teinetunnus") või esimenetunnus~teinetunnus. Alternatiiv funktsioonile facet_wrap() on facet_grid(), mis kuvab paneele pisut teistmoodi.

Eelmise korra graafikud

Eelmisel korral tehtud graafikud (nüüd ggplotiga)

Tulpdiagramm

Baasgraafika või ggplot2?

Kumbki graafikapakett ei ole olemuslikult parem kui teine ja on suur tõenäosus, et joonist, mida saad teha ggplotis, saad teha ka baasgraafikas. Kummaga täpselt töötada, sõltub isiklikest eelistustest, harjumusest ja veidi ka sellest, milliseid graafikuid ja mille jaoks tüüpiliselt kasutatakse. Baasgraafikapaketiga saab enamasti kiiremini oma andmetest ülevaate, ggplot pakub veidi enam võimalusi nt rakendustes või veebilehtedel jooksvateks joonisteks ning on laialtlevinud andmeteaduses. Publitseerimiseks tuleb mõlema paketiga töötades joonistega pisut vaeva näha. Mõlemal paketil on ka terve hulk laiendusi, mis võimaldavad teha asju, millega pakett ise toime ei tule (nt 3D graafikud ggplotis). Asjad, milles ggplotil on siiski selge eelis, on nt legendid, grupeerimine ja paneelid (facets). Loe ka siit.