14. Įvadas į ggplot2

Grafinis duomenų atvaizdavimas yra kritiškai svarbi kiekvienos duomenų analizės dalis padedanti pastebėti esminius duomenų bruožus efektyviau nei tai būtų galima padaryti vien tik skaitinėmis suvestinėmis.

Užduotis 14.1 Peržiūrėkite video epizodą apie duomenų vaizdinimą „Introduction“ ir atsakykite į klausimus:

  1. Kodėl svarbu atlikti ne tik skaitines, bet ir grafikes suvestines?

„R“ paketas ggplot2 yra „Tidyverse“ šeimos paketas, skirtas aukštos kokybės grafikams braižyti. Šis paketas veikia „grafikos gramatikos“ principais (angl. grammar of graphics, dvi pirmosios raidės „gg“ žodyje „ggplot“) – tai nuoseklaus grafikų konstravimo ir braižymo sistema. Paketo ggplot2 privalumas yra tai, kad ganėtinai mažomis pastangomis galima sukonstruoti ganėtinai gražius grafikus, yra daugybė paketų, išplečiančių galimybes, įrankių, supaprastinančių darbą su ggplot2 bei galimybė grafikus paversti interaktyviais (tokiais, kuriuos galima didinti, mažinti, sužinoti taškų koordinates, ir pan.).

Grafikos gramatikos idėja. Bet kokioje natūralioje (skirtoje bendrauti žmonėms, pvz., lietuvių) kalboje sakinius sudaro įvairios kalbos dalys – daiktavardžiai, būdvardžiai, prieveiksmiai, veiksmažodžiai… Pagal taisykles jungiant šias kalbos dalis į vieną visumą, konstruojami sakiniai. Analogiškai grafikos gramatikos idėja teigia, kad grafikus sudaro įvairūs elementai – duomenys, koordinačių sistema, ašys, geometrinės figūros, estetiniai elementai, tokie kaip spalvos, formos, linijų storiai, ir kiti komponentai, kurie ir yra tarsi įvairūs gramatikos elementai. Tad sluoksnis po sluoksnio sudedant šiuos elementus į vieną visumą galima sukonstruoti grafiką.

Šio skyriaus tikslas – supažindinti, kaip vizualizuojami duomenys ir kaip atliekamos grafinės duomenų suvestinės naudojantis ggplot2 sistema.

Dokumentaciją apie ggplot2 galite rasti paketo svetainėje , jei paketas įdiegtas ir užkrautas, „RStudio“ lange „Help“. Esminė informacija (su iliustracijomis), kaip naudoti ggplot2, pateikta šioje atmintinėje .

Užduotis 14.2 Peržiūrėkite video epizodą „The grammar of graphics“ :

  1. Paaiškinkite grafikos gramatikos idėją.
  2. Grafikos gramatikos elementų sluoksniai:
    1. Kiek yra grafikos gramatikos sluoksnių rūšių iš viso?
    2. Kurie sluoksniai yra pagrindiniai (privalomi)? Išvardinkite.
    3. Kokie yra likusieji sluoksniai? Išvardinkite.

Svarbu! Prieš analizuodami šį skyrių, susipažinkite su teorine medžiaga apie svarbiausius statistinius grafikus ir jų interpretavimą.

Prieš tęsdami darbą, būkite susipažinę su teorine medžiaga apie svarbiausius statistinius grafikus, jų sudarymo principus ir interpretavimą. Rekomenduojamas šaltinis – teorinės dalies konspekto skyrius „Grafikai“ .

14.1 Pasirengimas darbui

Prieš pradėdami braižyti grafikus, privalome atlikti kelis veiksmus:

  1. Užsikrauti reikiamus paketus;
  2. Jei reikia, pakeisti nustatymus (pvz., nustatyti reikiamą lokalę);
  3. Įsikelti duomenis.

14.1.1 Paketai ir nustatymai

Diegimas. Norint dirbti paketu ggplot2, reikia būti jį įsidiegus atskirai arba kartu su visais kitais „Tidyverse“ paketais.

install.packages("ggplot2")

Arba (geriau):

install.packages("tidyverse")

Jei turite įsidiegę paketą bio , norėdami pasitiktinti, ar turite šioms pratyboms reikiamas paketų versijas, galite naudoti kodą:

bio::check_installed_packages("ggplot")

Užsikraukime paketus:

library(ggplot2)
library(dplyr)

Arba tiesiog:

library(tidyverse)

Toliau atlikite užduotis 14.3.

Užduotis 14.3

  1. Pasitikrinkite, ar turite šioms pratyboms reikiamus paketus ir rekomenduojamas jų versijas. Svarbu, kad ggplot2 versija būtų 3.3.0 arba naujesnė. Jei ko nors trūksta, įsidiekite.
  2. Susikurkite naują „RStudio“ projektą.
  3. Susikurkite naują „R Script“ dokumentą ir projekto aplanke išsaugokite pavadinimu „ggplot2-grafikai.R“:
    • Pastaba: kol kas nekurkite „R Markdown“ dokumento. Su tuo bus susijusi atskira užduotis.
  4. Paketų užkrovimas ir nustatymų keitimas:
    1. Dokumento viršuje susikurkite skyrių „Užkraunami paketai“. Programos kode skyrius sukuriamas tada, kai eilutės pradžioje parašote groteles (komentarą), skyriaus pavadinimą ir po to padedate bent keturis minusus, pvz., „# Užkraunami paketai ----“. Reikiamose vietose svarbu padėti tarpus. Automatiškai skyriaus pavadinimą į „R script“ dokumentą galima įterpti paspaudus Ctrl+Shift+R ir iššokusiame lange parašius skyriaus pavadinimą. Vėliau kurdami skyrius išbandykite abu variantus: rašymą ranka ir automatinį metodą.
    2. Šiame skyriuje užkraukite visus reikiamus paketus. Dabar užtenka parašyti library(tidyverse), tačiau vėliau, jei prireiks kitų paketų, juos taip pat turėtumėte užkrauti šiame skyriuje.
    3. Sukurkite naują (antrą) skyrių pavadintą „Nustatymai“. Jame rašysime nustatymus, bendrus visai analizei.
    4. Nustatymų skyriuje parašykite kodą, kuris pakeičia „R“ lokalę į lietuviškąją. Pvz., „Windows“ vartotojai turi parašyti Sys.setlocale(locale = "Lithuanian").
    5. Dokumentą išsaugokite, pvz., paspaudę Ctrl+S. Dokumentą rekomenduojama išsaugokti reguliariai.
    6. Įvykdykite visą iki šiol parašytą programos kodą. Prisiminkite, kad kodo parašymas automatiškai jo neįvykdo. Kodą įvykdykite paspausdami „Run“ mygtuką arba greitąją klavišų kombinaciją Ctrl+Enter, bet prieš tai atliekant pelės žymeklis turi mirksėti eilutėje su komandomis arba komandos turi būti pažymėtos pele.
  5. Resursų peržiūrėjimas ir atsisiuntimas:
    1. Parsisiųskite ggplot2 atmintinę ir išsaugkite ją projekto aplanke. Peržiūrėkite, kokios temos joje apžvelgiamos. Atlikdami tolimesnes užduotis, atmintnėje pasižymėkite, ką jau mokėtės.
    2. Atsidarykite internetinę ggplot2 dokumentacijos versiją . Joje išvardintos svarbiausios ggplot2 funkcijos.
    • Jei kils neaiškumų ar reiks paaiškinimų, informacijos ieškokite šioje svetainėje.
    • Nuorodą į šią svetainę išsisaugokite projekto aplanke.
  6. Peržiūrėkite kelias ggplot2 grafikų galerijas. Atidžiai neanalizuokite, jūsų tikslas yra tiesiog peržvelgti grafikus ir susidaryti įspūdį, ką galima atlikti su ggplot2. Užduočiai skirkite apie 5 min., bet ne daugiau kaip 10 min. Vėliau, jei reikės, konkrečius grafikus galėsite paanalizuoti atidžiau. Galerijos:

14.1.2 Duomenys

Šiame skyriuje bus naudojamos kelios duomenų lentelės trees (juodųjų vyšnių tyrimas), CO2 (žolinių augalų CO2 įsisavinimo tyrimas), BOD (biocheminis deguonies poreikis), iris (irisų tyrimas) iš paketo datasets. Peržvelkime juos:

data(trees, package = "datasets")
glimpse(trees)
## Rows: 31
## Columns: 3
## $ Girth  <dbl> 8.3, 8.6, 8.8, 10.5, 10.7, 10.8, 11.0, 11.0, 11.1, 11.2, 11....
## $ Height <dbl> 70, 65, 63, 72, 81, 83, 66, 75, 80, 75, 79, 76, 76, 69, 75, ...
## $ Volume <dbl> 10.3, 10.3, 10.2, 16.4, 18.8, 19.7, 15.6, 18.2, 22.6, 19.9, ...
data(CO2, package = "datasets")
glimpse(CO2)
## Rows: 84
## Columns: 5
## $ Plant     <ord> Qn1, Qn1, Qn1, Qn1, Qn1, Qn1, Qn1, Qn2, Qn2, Qn2, Qn2, Qn...
## $ Type      <fct> Quebec, Quebec, Quebec, Quebec, Quebec, Quebec, Quebec, Q...
## $ Treatment <fct> nonchilled, nonchilled, nonchilled, nonchilled, nonchille...
## $ conc      <dbl> 95, 175, 250, 350, 500, 675, 1000, 95, 175, 250, 350, 500...
## $ uptake    <dbl> 16.0, 30.4, 34.8, 37.2, 35.3, 39.2, 39.7, 13.6, 27.3, 37....
data(BOD, package = "datasets")
glimpse(BOD)
## Rows: 6
## Columns: 2
## $ Time   <dbl> 1, 2, 3, 4, 5, 7
## $ demand <dbl> 8.3, 10.3, 19.0, 16.0, 15.6, 19.8
data(iris, package = "datasets")
glimpse(iris)
## Rows: 150
## Columns: 5
## $ Sepal.Length <dbl> 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4,...
## $ Sepal.Width  <dbl> 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7,...
## $ Petal.Length <dbl> 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5,...
## $ Petal.Width  <dbl> 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2,...
## $ Species      <fct> setosa, setosa, setosa, setosa, setosa, setosa, setosa...

„Console“ lange įrašę ?trees, ?CO2, ?BOD bei ?iris (vieną komandą vienu metu), detalesnius duomenų aprašymus galime pamatyti „Help“ lange.

Dabar atlikite užduotis 14.4

Užduotis 14.4

  1. Dokumente „ggplot2-grafikai.R“ susikurkite skyrių „Duomenų įkėlimas“. Šiam tikslui naudinga greitoji klavišų kombinacija Ctrl+Shift+R.
  2. Iš „R“ paketo datasets įsikelkite duomenis trees, CO2, BOD, iris.
    • Kodą įrašykite skyriuje „Duomenų įkėlimas“.
    • Kodą įvykdykite.
  3. Sukurkite skyrių „Duomenų peržiūra“.
  4. Skyriuje „Duomenų peržiūra“ patyrinėkite duomenų struktūrą naudodami glimpse(), View() ir kitas reikiamas komandas.
  5. Jei reikia, peržvelkite duomenų lentelių aprašymus dokumentacijoje.
  6. Pakeitimus dokumente „ggplot2-grafikai.R“ išsaugokite (nuo šiol tai darykite nuolat be atskiros instrukcijos). Pvz., paspauskite Ctrl+S.

14.2 Pirmasis grafikas

Naudodami duomenų lentelę „trees“, nusibraižykime grafiką, kuriame vaizduojama, kaip nuo medžio storio (Girth) priklauso medienos tūris (Volume):

ggplot(data = trees, mapping = aes(x = Girth, y = Volume)) +
  geom_point()
Pavyzdys: pirmasis grafikas **ggplot2** sistema.

Pav. 14.1: Pavyzdys: pirmasis grafikas ggplot2 sistema.

Šis grafikas vadinamas sklaidos diagrama.

Jūsų kompiuteryje grafiko tema bus standartinė – pilka, o šiame tinklalapyje naudojama balta.


Užduotis 14.5

  1. Dokumente „ggplot2-grafikai.R“ susikurkite naują skyrių „Pirmasis grafikas“.
  2. Į dokumentą nusikopijuokite grafiko braižymui skirtą kodą ir nusibraižykite pavyzdyje parodytą grafiką:
    • Geriausia, kad, prieš vykdant kodą, pelės žymeklis mirksėtų ties žodžiu „ggplot“ (t. y., eilutės pradžioje) arba pele būtų pažymėtos visos grafiką braižančios komandos (nuo „ggplot()“ iki „geom_point()“);
    • Grafikas atsiras „Plots“ kortelėje;
    • Jūsų kompiuteryje grafiko tema bus standartinė – pilka (šiame tinklalapyje – balta). Plačiau apie tai bus rašoma skyrelyje 14.11.
  3. Dokumentą su kodu išsaugokite:
    • Turėdami kodą ir duomenis, grafiką bet kada galėsite susigeneruoti iš naujo.

14.3 Kaip konstruojami „ggplot2“ grafikai?

Sistemos ggplot2 grafikai braižomi taip vadinamais sluoksniais. Praeito poskyrio programos kode matome tokius elementus:

  1. funkciją ggplot()ggplot2 grafikai įprastai pradedami braižyti parašius funkciją ggplot(), kuri sugeneruoja pradinius grafiko sluoksnius. Funkcijos skliaustuose nurodomi elementai, bendri visiems sluoksniams, nebent konkrečiame sluoksnyje nenurodysite kitaip;
  2. argumentą data – šioje vietoje nurodoma duomenų lentelė. Dauguma tidyverse šeimos funkcijų pasižymi tuo, kad pirmasis argumentas yra duomenų lentelė. Funkcija ggplot() – viena iš jų;
  3. mapping (liet. išdėstymas) – tai argumentas, kuriame aprašoma, kaip duomenys bus išdėstyti. Išdėstymas nurodomas funkcijos aes() (nuo angl. aesthetics, liet. estetika) skliaustuose. Pirmojo grafiko pavyzdyje (pav. 14.1) x ašyje išdėstytos kintamojo „Girth“ reikšmės, y ašyje – „Volume“ reikšmės.
  4. funkcijos aes() skliaustuose kintamųjų pavadinimai nurodomi be kabučių. Tai būdinga daugeliui kitų tidyverse funkcijų ir rodo, kad funkcija labiau skirta interaktyviai analizei, o ne programavimui. To mums ir reikia;
  5. funkciją geom_point() – tai grafiko sluoksnis, kuris nurodo, kad duomenys bus atvaizduoti geometrinėmis figūromis – taškais.
  6. operatorių „+“ – sluoksniai (grafiką kuriančios „R“ komandos) sujungiami naudojant pliuso ženklą. Pliuso ženklas privalo būti eilutės gale arba viduryje, bet ne pradžioje.

Sistemos ggplot2 sluoksnių sujungimas:

  1. Norint sujungti kelis ggplot2 sluoksnius (komandas), naudojamas „+“ ženklas;
  2. Po šio ženklo, kita komanda įprastai rašoma iš naujos eilutės;
  3. +“ rašomas arba tarp gretimų komandų toje pačioje eilutėje, arba eilutės gale.
  1. Pliuso ženklas negali būti eilutės pradžioje – tai sintaksės klaida.

BLOGAI:
ggplot()
+ kita_ggplot2_komanda()

GERAI:
ggplot() +
kita_ggplot2_komanda()


GERAI (bet nerekomenduojama, jei jungiama daug komandų):
ggplot() + kita_ggplot2_komanda() + dar_kita_ggplot2_komanda()


Užduotis 14.6 Peržiūrėkite video epizodą „ggplot2 layers“ .

Užduotis 14.7

  1. Naudodami duomenų lentelę CO2 ir aukščiau pateiktą pavyzdį, nubraižykite, kaip anglies dioksido įsisavinimas (uptake) priklauso nuo šios medžiagos koncentracijos ore (conc). Jums tereikia nusikopijuoti kodą ir pakeisti duomenų lentelės bei kintamųjų pavadinimus. Didžiosios ir mažosios raidės pavadinimuose – svarbu.
  2. Programos kodą išsaugokite.

14.4 Funkcija ggplot()

Funkcija ggplot() įprastai yra pirmoji ggplot2 grafiko konstravimo sekoje. Jos skliaustuose nurodomi elementai, bendri visiems sluoksniams. Tokiais elementais dažniausiai būna duomenų lentelė ir kintamųjų išdėstymo instrukcijos, nors šiuos du dalykus galima nurodyti kiekvienam sluoksniui atskirai. Turint duomenis ir kintamųjų reikšmių išdėstymo komandą, ggplot() parenka koordinačių sistemą, ašis, jų ribas bei numatytąją grafiko temą, tačiau nei taškų, nei linijų, nei kitų geometrinių figūrų nebraižo (tam reikalingi kiti sluoksniai):

ggplot(data = trees, mapping = aes(x = Girth, y = Volume))

Dažnai „R“ naudotojai argumentų pavadinimų data ir mapping nerašo, tad kodas sutrumpėja:

ggplot(trees, aes(x = Girth, y = Volume))


Užduotis 14.8 Įvykdykite kodą ggplot(BOD, aes(x = Time, y = demand)):

  1. Kas nubraižyta grafike?
  2. Kodėl nėra nei duomenis vaizduojančios linijos, nei taškų?
Atsakymą pakomentuokite šalia programos kodo.

14.5 Estetika: kintamojo reikšmių išdėstymas

Kintamųjų reikšmės gali būti atvaizduotos įvairiomis grafiko savybėmis: padėtimi x bei y ašyse, spalvomis, taškų dydžiais, linijos storiais, taškų formomis… Sistemoje „ggplot2“ šie dalykai vadinami estetiniais elementais arba estetiniu išdėstymu (angl. aesthetics). Kintamojo reikšmių išdėstymas nurodomas funkcijos aes() skliaustuose. Pvz., vietovę (Type), kuri gali būti Kvebekas arba Misisipė, atvaizduosime spalvomis:

ggplot(data = CO2, mapping = aes(x = conc, y = uptake, color = Type)) +
  geom_point()


Medžio aukštį atvaizduosime ir spalvomis, ir taško dydžiais:

ggplot(data = trees, mapping = aes(x = Girth, y = Volume, color = Height, size = Height)) +
  geom_point()


Matote taškus – mažas yra tamsiai mėlynas, didelis yra žydras.

Atkreipkite dėmesį, kad faktoriams automatiškai parenkama diskrečioji spalvų skalė, o skaitiniams kintamiesiems – tolydžioji.

14.5.1 Estetinių savybių rūšys

Kokios gali būti estetinės savybės? Tai priklauso nuo parinktos geometrinės figūros: kiekvienos figūros dokumentacijoje aprašyti galimi estetiniai elementai. Dažniausiai naudojami šie (pastorintus pavadinimus – a–f – reiktų žinoti labai gerai):

  1. x, y – išdėstymas x ir y ašyse;
  2. color, colour – pagrindinė spalva arba apvado spalva (ir amerikietiška, ir britiška rašyba tinka);
  3. fill – užpildo spalva;
  4. alpha – (ne)skaidrumas/(ne)permatomumas: 1 – visiškai nepermatomas, 0 – visiškai skaidrus;
  5. size – dydis;
  6. group – grupavimas, pvz., braižant linijas, skaičiuojant vidurkius. Jei pasirenkate vieną iš aukščiau aprašytų estetinių elementų, grupavimas vykdomas automatiškai;
  7. shape, pch – taško forma (pchpoint character);
  8. stroke – „potepio“ storis (pvz., taško apvado linijos storis);
  9. linetype, lty – linijos tipas;
  10. linewidth, lwd – linijos storis;
  11. label – tekstas, etiketės reikšmė;
  12. kiti.

Ne visos geometrinės figūros turi užpildo spalvą (parametrą fill).

Užduotis 14.9 Peržiūrėkite video epizodą „Visible aesthetics“ .

Plačiau apie šiuos grafinius elementus (su iliustracijomis) rašoma:

Užduotis 14.10

  1. Įvykdykite kodą ?geom_point. Atsidariusioje dokumentacijoje susiraskite skiltį „Aesthetics“.
    1. Pažiūrėkite, kokie estetiniai elementai gali būti panaudoti braižant taškus?
    2. Kurie iš jų privalomi? (Pažymėta pajuodintai).
  2. Pirmo punkto užduotį pakartokite su ?geom_line.
  3. Nubraižykite sklaidos diagramas. Duomenų lentelės trees kintamųjų Height ir Girth reikšmes išdėstykite x ir y ašyse, o Volume:
    1. spalvomis;
    2. (ne)skaidrumo skalėje.

14.5.2 Kur nurodoma, kaip išdėstyti reikšmes?

Šiame poskyryje aiškinsimės, koks skirtumas, kai išdėstymą nurodome funkcijoje ggplot() ir kai kituose, po jos einančiuose, sluoksniuose.

Žemiau esančiame pavyzdyje – iriso rūšys išdėstytos spalvomis. Visiems sluoksniams bendras išdėstymas nurodomas funkcijoje ggplot():

ggplot(iris, aes(x = Sepal.Width, y = Petal.Width, color = Species)) +
  geom_point()


Vien tik konkrečiam sluoksniui būdingus išdėstymo elementus galima nurodyti to sluoksnio funkcijos skliaustuose:

ggplot(iris, aes(x = Sepal.Width, y = Petal.Width)) +
  geom_point(aes(color = Species))


Kiekviename sluoksnyje galime patikslinti arba pakeisti, kokiu būdu bus pasirenkamos spalvos. Tad esant patikslinimui, tai, kas parašyta ggplot() skliaustuose (šiuo atveju – savybė color), bus ignoruojama:

ggplot(iris, aes(x = Sepal.Width, y = Petal.Width, color = Species)) +
  geom_point(aes(color = Petal.Width))


Be abejo, visus estetinio išdėstymo elementus galima nurodyti ir vien tik konkretaus sluoksnio viduje:

ggplot(iris) +
  geom_point(aes(x = Sepal.Width, y = Petal.Width, color = Species))

Analogiškai galima elgtis ir su duomenimis. Kiekvienam sluoksniui gali būti atskiri duomenys ir atskiras išdėstymas. Visgi, atkreipkite dėmesį, kokiu būdu ir kurioje vietoje nurodomi duomenys (t. y., įprastai po išdėstymo aprašymo ir naudojant argumentą data =):

ggplot() +
  geom_point(aes(x = Sepal.Width, y = Petal.Width, color = Species), data = iris)

Visgi, šių galimybių esmė labiau išryškėja, kai turime bent du geometrinių figūrų sluoksnius.

# Spalva (ir automatinis grupavimas) nurodoma visiems sluoksniams bendrai
ggplot(iris, aes(x = Sepal.Width, y = Petal.Width, color = Species)) +
  geom_point() +
  geom_smooth()

# Spalva (ir automatinis grupavimas) nurodoma tik taškams
# Tad yra viena linija, bendra visiems duomenims
ggplot(iris, aes(x = Sepal.Width, y = Petal.Width)) +
  geom_point(aes(color = Species)) +
  geom_smooth()

# Spalva (ir automatinis grupavimas) nurodoma tik linijoms
# Tad visi taškai yra vienspalviai
ggplot(iris, aes(x = Sepal.Width, y = Petal.Width)) +
  geom_point() +
  geom_smooth(aes(color = Species))


Tam, kad geriau suprastumėte šio skyriaus medžiagą, atlikite užduotis 14.11.

Užduotis 14.11

  1. Nusibraižykite pirmus du poskyrio „14.5.2 Kur nurodoma, kaip išdėstyti reikšmes?“ grafikus, papildomai pridėdami geom_line() sluoksnį be jokių papildomų argumentų:
    1. Kuo linijos skiriasi nuo taškų (kokios vienų ir kitų spalvos)?
  2. Imkime pirmąjį punkto 1 grafiką, kuriame atvaizduota sklaidos diagrama ir naudojama duomenų lentelė iris, rūšys išdėstytos spalvomis, o jų išdėstymas nurodytas funkcijos ggplot() (o ne geom_point()) skliaustuose.
    1. Susikurkite naują duomenų lentelę naudodami šį kodą:
    • iris2 <- filter(iris, Species %in% c("setosa", "virginica"));
    • kodas palieka tik tas duomenų eilutes, kuriose yra setosa ir virginica rūšių duomenys.
    1. taškų braižymo funkciją modifikuokite taip: geom_point(data = iris2). Likusio kodo nekeiskite:
    • Pagal kuriuos duomenis (iris ar iris2) buvo nubraižytas grafikas?
    • Kur nurodytas estetinis išdėstymas, kuris buvo panaudotas braižant taškus: funkcijos geom_point() ar ggplot() skliaustuose?
    1. prie punkto b grafiko pridėkite geom_line():
    • Kelių spalvų linijas ir kelių spalvų taškus matote?


14.5.3 Parametro group svarba

Parametras group įprastai reikalingas braižant linijas ar norint kitu tikslu sugrupuoti duomenų reikšmes. Nenurodžius jo, ggplot2 ne visada linijas braižo teisingai. Šiuo atveju vienai spalvų grupei per visus taškus automatiškai braižoma viena linija:

ggplot(data = CO2, mapping = aes(x = conc, y = uptake, color = Type)) +
  geom_line() +
  geom_point()


O šiuo atveju išreikštai nurodome, kad vienam augalui (o ne vienai spalvai) turi būti viena linija:

ggplot(data = CO2, mapping = aes(x = conc, y = uptake, color = Type, group = Plant)) +
  geom_line() +
  geom_point()


Taškus galima grupuoti ir kitaip:

ggplot(data = CO2, mapping = aes(x = conc, y = uptake, color = Type, group = conc)) +
  geom_line() +
  geom_point()


Užduotis 14.12 Iš paketo MASS užsikraukite duomenų lentelę Rabbit. Nubraižykite kraujospūdžio pokyčio priklausomybę nuo vaisto dozės. Priklausomybė turi būti pavaizduota ir linijomis, ir taškais, skirtingos spalvos turi vaizduoti kontrolinę ir vaisto gavusių tiriamųjų grupes. Kiekviena linija turi vaizduoti atskirą eksperimentą (kintamasis Run). Duomenų lentelę reiktų peržvelgti naudojant funkcijas glimpse(), View() bei summary() (pažiūrėkite, kaip aprašomos kategorinių kintamųjų reikšmės). Taip pat svarbu perskaityti duomenų lentelės aprašymą (įvykdykite kodą ?MASS::Rabbit). Naudodamiesi grafiku atsakykite į klausimus.

  1. Preliminariai įvertinkite, kas įprastai įvyksta su kraujospūdžiu didinant vaisto dozę.
  2. Kuo skiriasi kontrolinės ir tiriamosios grupės atsakas:
    1. kai vaisto dozė <100μg;
    2. kai vaisto dozė >100μg.
  3. Ties kokia vaisto doze spalvomis pavaizduotos grupės skiriasi labiausiai (t. y., skirtingų spalvų taškai persidengia mažiausiai)?

14.6 Visam sluoksniui bendrų estetinių savybių parinkimas

Estetikos elementų reikšmes galima parinkti 2 būdais:

  1. estetikos elementų reikšmes galima išdėstyti pagal kintamųjų reikšmes naudojant funkciją aes(). Pvz., skirtingoms grupėms suteikti skirtingas spalvas.
ggplot(iris, aes(x = Petal.Length, y = Sepal.Width)) +
  # Yra aes(), nėra kabučių – rūšių išdėstymas spalvomis:
  geom_point(aes(color = Species)) 

  1. estetikos elementui galima nurodyti konkrečią reikšmę, kuri bus bendra visam sluoksniui. Pvz., visiems taškams parinkti tą pačią spalvą. Tai atliekama nebe funkcijos ggplot() ir nebe funkcijos aes() skliaustuose, o konkrečiame sluoksnyje. Taip nurodomos reikšmės kartais dar vadinamos atributais.
ggplot(iris, aes(x = Petal.Length, y = Sepal.Width)) +
  # Nėra aes(), yra kabutės – bendros sluoksniui spalvos parinkimas:
  geom_point(color = "tomato4") 

Toks naudojimas įprastai yra nekorektiškas:

# Reikšmė „green“ (žalia) yra išdėstyta raudona spalva:
ggplot(iris, aes(x = Petal.Length, y = Sepal.Width)) +
  geom_point(aes(color = "green"))

Užduotis 14.13 Peržiūrėkite video epizodą „Using attributes“ .

Užduotis 14.14 Peržvelkite šio skyriaus pavyzdžius:

  1. Kaip nurodomos bendros visam sluoksniui spalvos?
  2. Ar nurodant bendrą geometrinės figūros spalvą naudojamos funkcijos ggplot() arba aes()?

Konkrečios spalvos gali būti nurodomos keliais būdais:

  1. nurodant spalvos numerį nuo 1 iki 8 (būdas atėjo iš bazinės „R“ grafikų braižymo sistemos);
  2. nurodant anglišką spalvos pavadinimą kabutėse, pvz., "green". Visi „R“ esantys spalvų pavadinimai atspausdinami suvedus colors(), spalvų demonstracija – demo("colors") (spausdami „Enter“ matysite vis kitą paveikslą. Siūlau paveikslus smarkiai pasididinti);
  3. nurodant šešioliktainį spalvos kodą RGB (red, green, blue) sistemoje, pvz., "#12ff6d" (12 – raudonos, ff – žalios, 6d – mėlynos spalvos intensyvumas).
    • galimos šešioliktainių skaičių reikšmės: 0, 1, 2, …, 9, a, b, c, d, e, f.

Jei norite pamatyti, kaip atrodo spalva, funkcijos scales::show_col() kabutėse įrašykite spalvos kodą arba pavadinimą, pvz., scales::show_col("#12ff6d") arba scales::show_col(5).


Pastaba: jei paketas yra įdiegtas kompiuteryje, dvigubo dvitaškio operatorius :: leidžia naudoti funkciją iš to paketo, paketo neužsikrovus (paketas::funkcija()). Pavyzdyje virš šios dėžutės naudojama funkcija show_col() iš paketo scales. Plačiau apie operatorių rašoma skyriuje „7.3.3 [Operatorius ::]“.


Pavyzdys. Konkrečios spalvos parinkimas.

ggplot(iris, aes(x = Sepal.Width, y = Petal.Width)) +
  geom_point(color = "red4")

Spalvos ir permatomumo lygio parinkimas:

ggplot(iris, aes(x = Sepal.Width, y = Petal.Width)) +
  geom_point(color = "red4", alpha = .3)

Padidinę taškų permatomumą, galime matyti, kuriose vietose taškai persidengia (tamsesnės vietos – daugiau taškų).

Užduotis 14.15 Peržiūrėkite video epizodus:

  1. „Modifying aesthetics“
  2. „Aesthetics best practices“

Užduotis 14.16

  1. Nueikite į tinklalapį „www.google.com“ ir paieškos langelyje parašykite #9a5485. Kokia tai spalva?
  2. Duomenų lentelė iris. Pagal kintamojo Petal.Width reikšmes nusibraižykite branduolinio tankio diagrama (geom_density()). Kiekviena rūšis turi būti atvaizduota skirtingo užpildo spalvomis, tačiau apvado spalva privalo būti mėlyna, apvado linija – pastorinta, o užpildo spalva – permatoma.

14.7 Geomai: geometrinės figūros

Sistemos ggplot2 sluoksnių elementai sudedami pliuso ženklu „+“ sujungiant kelias grafiką formuojančias komandas (sluoksnius). Funkcija ggplot() pagal nurodytus duomenis sukuria tik numatytąją koordinačių sistemą ir ašis (kaip matote pavyzdyje aukščiau). Jei norime atvaizduoti duomenis, turime pridėti papildomą elementą – geometrinę figūrą („geomą“). Tai atlieka funkcijos, prasidedančios užrašu geom_.

Receptas“, kaip sukurti paprastą ggplot2 histogramą:

ggplot(duomenys, aes(x = kintamasis1)) + geom_histogram(bins = 15)

Parametras bins – histogramos stulpelių skaičius.


Receptas“, kaip sukurti paprastą ggplot2 sklaidos diagramą:

ggplot(duomenys, aes(x = kintamasis1, y = kintamasis2)) + geom_point()

Užduotis 14.17 Peržiūrėkite video epizodą „Scatter plots“ .


Pastebėkite, kad kai kuriais atvejais reikia nurodyti ir x, ir y kintamuosius, kai kuriais tik vieną iš jų. Tai priklauso nuo to, kokio tipo grafiką siekiame nubraižyti.

Sistemoje ggplot2:

  • faktoriams (fct, ord) patenkama diskrečioji skalė;
  • skaitiniams kintamiesiems (int, dbl) – tolydžioji.

Visi kiti duomenų tipai įprastai verčiami į faktorius. Tad prieš braižydami grafiką, kintamiesiems parinkite reikiamą duomenų tipą.

Dažniausiai naudojamos geometrinės figūros, kai x ir/arba y ašyje:

  1. Nurodytas tik vienas kategorinis/diskretusis kintamasis:
    • geom_bar() (stulpelinė diagrama).
    Funkcija automatiškai suskaičiuoja, kiek kartų pasikartoja kiekviena nurodyto kintamojo reikšmė, ir nubraižo grafiką, kuris parodo, kaip pasiskirsto šio kintamojo reikšmės.
  1. Nurodyti vienas kategorinis/diskretusis ir vienas tolydusis/skaitinis kintamasis:
    • geom_col() (stulpelinė diagrama).
    Nubraižo stulpelinę diagramą, kai iš anksto žinomi kiekvienos grupės stulpelių aukščiai (pvz., jei norime atspausdinti dažnių lentelę).
  1. Nurodytas tiktai vienas tolydusis kintamasis:
    • geom_density() (branduolinio tikimybės tankio diagrama, BTD);
    • geom_histogram() (histograma).
    Parodo, kaip pasiskirsto vieno tolydžiojo kintamojo reikšmės.
  1. Nurodyti vienas kategorinis/diskretusis, kitas – tolydusis/skaitinis kintamieji:
    • geom_boxplot() (stačiakampė diagrama);
    • geom_violin() (smuikinė diagrama);
    • geom_jitter() (pasklaidytų taškų diagrama).
    Parodo, kaip tolydžiojo kintamojo reikšmės pasiskirsto kiekvienos kategorinio kintamojo grupės viduje arba kaip tolydžiųjų reikšmių pasiskirstymas priklauso nuo kategorinio kintamojo grupės.
  1. Nurodyti du tolydieji/skaitiniai:
    • geom_point() (sklaidos diagrama);
    • geom_line() (linijų diagrama);
    • geom_jitter() (pasklaidytų taškų diagrama).
    Parodo, kaip tarpusavyje susijusios (ar vienos nuo kitų priklauso) dviejų tolydžiųjų/skaitinių kintamųjų reikšmės.


Štai keletas pavyzdžių (pavyzdžiuose color – apvado spalva, fill – užpildo spalva):

  1. Vienas kategorinis/diskretusis:
ggplot(CO2, aes(x = Type)) +
  geom_bar(fill = "red4")

Abejose grupėse po 42 atvejus, todėl abu stulpeliai vienodo aukščio. Atkreipkite dėmesį, kad funkcija pati suskaičiavo, kiek kokios grupės narių yra imtyje, ir pagal tai parinko stulpelių aukštį.

Jei turite gplot2 3.3.0 versiją ar naujesnę (išleista 2020-03-05), lengvai galite nusibraižyti ir vertikalius stulpelius (vietoj x parašome y):

ggplot(CO2, aes(y = Type)) +
  geom_bar(fill = "red4")


  1. Vienas – kategorinis/diskretusis, o kitas – tolydusis/skaitinis (dažnių lentelės spausdinimas):
# Sukuriama dažniu lentele
darbuotojai <- data.frame(
  darbingumas = factor(
    x = c("prastas", "vidutinis", "didelis"),
    levels = c("prastas", "vidutinis", "didelis")
  ),
  skaicius = c(5, 27, 46)
)
# Atspausdiname lentele
print(darbuotojai)
##   darbingumas skaicius
## 1     prastas        5
## 2   vidutinis       27
## 3     didelis       46
# Grafikas
ggplot(darbuotojai, aes(x = darbingumas, y = skaicius)) +
  geom_col()

Atkreipkite dėmesį, kad funkcijai buvo nurodyta, kokio aukščio stulpelius brėžti.


  1. Vienas tolydusis:
ggplot(CO2, aes(x = conc)) +
  geom_density(fill = "skyblue")

ggplot(CO2, aes(y = conc)) +
  geom_density(fill = "skyblue")

ggplot(CO2, aes(x = conc)) +
  geom_density(fill = "skyblue3") +
  geom_rug(color = "red") # Kiekviena taška brukšneliu pažymi po grafiku

ggplot(CO2, aes(x = conc)) +
  geom_histogram(bins = 7, color = "black")

bins – histogramos stulpelių skaičius.


  1. Abu tolydieji/skaitiniai:
ggplot(BOD, aes(x = Time, y = demand)) +
  geom_point()

ggplot(BOD, aes(x = Time, y = demand)) +
  geom_line()

ggplot(BOD, aes(x = Time, y = demand)) +
  geom_line() +
  geom_point(color = "purple", size = 4)

Yra skirtumas, ar pirma nurodomos linijos, ar taškai: objektai brėžiami vieni ant kitų.


  1. Vienas – kategorinis/diskretusis, kitas – tolydusis:
ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  geom_boxplot()

ggplot(iris, aes(y = Species, x = Sepal.Length)) +
  geom_boxplot()

set.seed(123456)
ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  geom_jitter(width = .15)

width – taškų pasklaidymo plotis.
set.seed() naudojamas todėl, kad taškai išsklaidomi atsitiktinai (plačiau skaitykite skyriuje 5.4.1).

ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  geom_violin()


Video epizodas 14.1 Svarbiausių šiam kursui grafikų braižymas sistema „ggplot2“.



Užduotis 14.18 Peržiūrėkite video epizodus:

Užduotis 14.19 Grafikų analizė. Parinkite ir nubraižykite po grafiką, kuris galėtų atsakyti į šiuos klausimus (kiekvienam klausimui sukurkite atskirą poskyrį R Script dokumente):
  1. Duomenys iris:
    1. Kaip pasiskirsto kintamojo Sepal.Width reikšmės visoje imtyje?
    2. Kaip pasiskirsto kintamojo Petal.Width reikšmės visoje imtyje? (Parinkite kito tipo grafiką);
    3. Koks irisų rūšių skirstinys imtyje? Kurios rūšies daugiausiai?
    4. Kaip Sepal.Length priklauso nuo Petal.Length?
    5. Kaip Petal.Length reikšmės pasiskirsto pagal rūšis?
    6. Kurios rūšies pogrupyje kintamojo Sepal.Width reikšmės įprastai yra didžiausios?
  2. Duomenys npk (iš „R“ paketo datasets). Nubraižykite kintamojo yield:
    1. histogramą:
      • geometrinę figūrą kuriančios funkcijos (geom_histogram()) skliaustuose nurodykite parametrus bins = 6, color = "black"?;
      1. analizuodami šį grafiką nustatykite, kiek imtyje yra reikšmių, mažesnių už 65?
    2. branduolinio tankio grafiką;
      • geometrinę figūrą kuriančios funkcijos (geom_density()) skliaustuose nurodykite parametrus adjust = 1.5, fill = "green4";
      1. analizuodami grafiką preliminariai įvertinkite, kokios reikšmės labiausiai tikėtinos. Atsakymą pateikite kaip intervalą tarp dviejų sveikųjų skaičių (pavyzdžiui, 126-127);
      2. ką daro parametras adjust? (Paeksperimentuokite).
    3. stačiakampę diagramą (x ašyje atidėkite kintamojo „block“ reikšmes):
      1. Eilės tvarka išvardinkite blokus nuo turinčio didžiausią iki turinčio mažiausią duomenų centro padėtį;
      2. Eilės tvarka išvardinkite blokus nuo pasižyminčio didžiausia iki pasižyminčio mažiausia sklaida (naudokite išskirtims atsparų sklaidos matą – IQR);
      3. Kuris blokas pasižymi didžiausia asimetrija?
    4. punkto c stačiakampių diagramų grafiką papildykite pasklaidytų taškų diagrama (geom_jitter(width = 0.1)):
      1. Įvertinkite grupių dydžius kiekviename bloke;
      2. Ką daro parametras width?


Duomenų centro padėtį įprastai nusako tokie dydžiai kaip vidurkis (M, x¯) ar mediana (Md, x~).

Duomenų sklaidą – standartinis nuokrypis (SD), kvartiliai (Q1, Q3) ar tarpkvartilinis atstumas (IQR=Q3Q1).

(Skliaustuose nurodyti vienas ar keli standartiniai trumpiniai).

14.8 ggplot2 grafikas – tai R objektas

Sistemos ggplot2 komandos kuria objektą (jo klasė „ggplot“, o pagal savo vidinę struktūrą – tai ilgas grafiką aprašantis sąrašas). Objektą atspausdinę ekrane, matome grafiką. Klasės „ggplot“ objektą „R“ atmintyje galima išsaugoti bet kuriame grafiko konstravimo etape.

# Sukuriama tik koordinaciu sistema ir ašys
grafikas <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width))

Parašius objekto su grafiku pavadinimą, grafikas atspausdinamas:

grafikas


Atspausdinti galime ir išreikštai parašę print():

print(grafikas)

Objekto klasė:

class(grafikas)
## [1] "gg"     "ggplot"

Vėliau prie šio objekto galima pridėti kitus ggplot2 sluoksnius:

# Pridedami taškai
grafikas2 <- grafikas + geom_point()
grafikas2

Anksčiau išbandėme, kaip atrodo taškais atvaizduoti duomenys, dabar galime išbandyti linijas:

# Pridedamos linijos
grafikas3 <- grafikas + geom_line()
grafikas3


Grafiką aprašantį objektą galime išsaugoti arba kaip įprastinį „R“ objektą, arba kaip aukštos kokybės grafiką (apie tai bus rašoma vėliau).

Užduotis 14.20 Paketui ggplot2 skirta atmintinė parašyta šitokiu principu: pirma sukuriama grafiko dalis, bendra keliems pavyzdžiams, ir ji išsaugoma „R“ atmintyje kaip objektas, turintis pavadinimą. Prie šio objekto pridedamos komandos, kurios demonstruoja tam tikras ggplot2 sistemos savybes.

Atsidarykite šią atmintinę (jei darėte visas šio skyriaus užduotis, ją jau atsisiuntėte) ir pirmame puslapyje susiraskite skiltį „ONE VARIABLE continuous“. Ką turite padaryti, kad pavyzdžio c + geom_dotplot() kodas veiktų? Užrašykite visą grafiką sudarantį kodą. Patiems kurti nereikia! Susiraskite, visas atsakymas parašytas atmintinėje.

PASTABA: įprastai objektui duoti pavadinimą c yra prasta mintis, nes yra standartinė „R“ funkcija pavadinimu c().

14.9 Facetės: subgrafikai

Palyginus su kitomis „R“ grafikų braižymo sistemomis, netgi su kitomis programomis, labai didelis ggplot2 privalumas yra galimybė duomenis atvaizduoti subgrafikais, vadinamais facetėmis. Facetės – tai subgrafikai, į kuriuos duomenys yra išskirstomi pagal kategorinių kintamųjų reikšmes.

Yra 2 facečių tipai:

  • facet_wrap() – subgrafikus išrikiuoja į kiek galima labiau kvadratinę išdėstymo schemą;
  • facet_grid() – subgrafikus išdėsto eilutėmis ir stulpeliais pagal nurodytų kintamųjų reikšmes.

Facečių sluoksnis pridedamas pridedant vieną iš aukščiau minėtų funkcijų. Naudojimas:

  • facet_wrap() skliaustuose rašoma:
    1. bangelė ~ ir kintamojo pavadinimas (pvz., ~A).
    2. jei norima išskirstyti pagal kelis kintamuosius, naudojamas + ženklas (pvz., ~A + B);
  • facet_grid() skliaustuose rašoma:
    1. į eilutes išskaidančio kintamojo pavadinimas, bangelė ~ ir į stulpelius išskaidančio kintamojo pavadinimas (pvz., A ~ B).
    2. jei norime vienos eilutės arba vieno stulpelio, vietoje kintamojo pavadinimo rašome tašką (pvz., . ~ A – viena eilutė, A ~ . – vienas stulpelis);
    3. jei kintamųjų daugiau, galima naudoti + ženklą (pvz., A ~ B + C);
    4. galioja ES taisyklė: pirma nurodomos eilutės, po to – stulpeliai.


Pavyzdžiai:

graf <- ggplot(CO2, aes(x = conc, y = uptake, color = Type, group = Plant)) +
  geom_line() +
  geom_point()
# facet_wrap — vienas kintamasis

graf + facet_wrap(~Type)

# facet_wrap — vienas keli kintamieji
graf + facet_wrap(~ Type + Treatment)

Pažvelkite į šį grafiką dar kartą . Kokia iš jo nauda biologine prasme? Misisipės augalai auga pietuose. Kvebeko – šiaurėje (pažiūrėkite žemėlapyje, kur yra šios teritorijos). Iš grafiko galime įtarti, kad pietiniai augalai prasčiau toleruoja šaltį: „Mississippi“ ir „chilled“ (atvėsinta) facetėje įsisavinimas mažiausias. Ar šitokia interpretacija jums atrodo logiška?

Panagrinėkime kitus facečių sudarymo variantus.

# facet_wrap — vienas keli kintamieji,
# nurodomas stulpeliu skaicius.
graf + facet_wrap(~ Type + Treatment, ncol = 3)

# facet_grid
graf + facet_grid(Type ~ Treatment)

# facet_grid — viena eilute
graf + facet_grid(. ~ Treatment)

# facet_grid — vienas stulpelis
graf + facet_grid(Treatment ~ .)


Programoje „R“ užrašai, kuriuose kintamieji pasirenkami naudojant bangelę (~), vadinami „modelio formule“ arba tiesiog „formule“. Jie naudojami daugelyje statistinės analizės funkcijų. Daugiau informacijos suvedus komandas: ?`~` arba ?formula.


Modelio formulė – tai kintamųjų pasirinkimo būdas naudojant operatorių „~“ (bangelę).


Užduotis 14.21

  1. Iš „R“ paketų užsikraukite lentelę iris ir peržvelkite ją naudodami glimpse(). Jei reikia, peržvelkite lentelės aprašymą.
    1. Nusibraižykite sklaidos diagramą pagal Sepal.Width ir Petal.Length. Spalvas parinkite ir į facetes suskirstykite pagal Species.
    2. Pagal kintamojo Petal.Length reikšmes nusibraižykite branduolinio tankio diagramas. Kiekviena rūšis turi būti atvaizduota skirtingo užpildo spalvos grafiku ir atskirose facetėse, išdėstytose į vieną eilutę.
  2. Iš „R“ paketo datasets užsikraukite lentelę npk. Nubraižykite grafiką, kurio pavyzdys žemiau. Patarimai:
    1. Kintamųjų block ir yield reikšmes išdėstykite x ir y ašyse;
    2. Spalvas išdėstykite pagal P;
    3. Į facetes suskirstykite pagal N, P ir K;
    4. Facečių funkcijos viduje po formulės parašykite kodą labeller = label_both. Atkreipkite dėmesį, ką jis daro;
    5. Reikiamoje vietoje padėkite kablelį.

14.10 Pavadinimai

Grafikuose galima nurodyti/pakeisti grafiko, ašių, legendų pavadinimus.

Šiam tikslui daugiausiai galimybių turi funkcija labs(). Pavyzdys, kaip ji naudojama:

ggplot() +
  labs(
    x = "x ašies pavadinimas",
    y = "y ašies pavadinimas",
    title = "Grafiko pavadinimas",
    subtitle = "Paantrašte",
    caption = "< Aprašymas >",

    # Kiekvieno estetinio išdestymo legenda
    color = "Spalvu legenda", # nesimato
    fill = "Užpildo spalvu legenda", # nesimato
    shape = "Formu legenda", # nesimato
    size = "dydžiu legenda" # nesimato
  )

Iliustracijai susikurkime „ggplot“ objektą:

gg <- ggplot(iris, aes(x = Sepal.Length, fill = Species, color = Species)) +
  geom_density(alpha = 0.3, adjust = 1.5)
gg + labs(x = "x ašis", y = "y ašis")

gg + labs(
  x = "x ašis",
  y = "y ašis",
  fill = "Spalvu legenda",
  color = "Spalvu legenda"
)

`

gg + labs(
  title = "Pavadinimas",
  x = "x ašis",
  y = "y ašis",
  fill = "Užpildo spalvu legenda",
  color = "Apvado spalvu legenda"
)

Grafiko pavadinimas gali būti nurodomas naudojant funkciją ggtitle("...").

gg + ggtitle("Grafiko pavadinimas")

Ašių ir legendų pavadinimai – nurodyti naudojant funkcijas:

  • labs(x = "...", y = "...", color = "...", fill = "...");
  • xlab("...");
  • ylab("...").
gg + ylab("<< Pasikeite pavadinimas Y >>")


Užduotis 14.22 I) Duomenys trees. Pagal kintamojo Height reikšmes nubrėžkite histogramą: 1. Parinkite tinkamą grupavimo intervalų skaičių, parinkite tinkamą apvado ir užpildo spalvą, apvadą pastorinkite; 2. Sutvarkykite pavadinimus: a) grafikui suteikite pavadinimą, b) ašių pavadinimus sulietuvinkite, c) paantraštėje turi būti parašyta „Sukūrė: “ ir jūsų vardas; d) aprašyme (parametras caption) turi būti įrašyta šiandienos data.

  1. Duomenys iris. Pagal pasirinkto kintamojo reikšmes nubrėžkite branduolinio tankio grafiką:
    1. Užpildas turi būti permatomas;
    2. Užpildo spalvos parinktos pagal kintamojo Species reikšmes.
    3. Legendos pavadinimas turėtų būti pakeistas į „Rūšis“.
    4. Ašių pavadinimai – sulietuvinti.

14.11 Temos

Grafiko tema – tai visos nuo duomenų nepriklausomos grafiko savybės, tokios kaip fono ar ašių linijų spalva, šriftas. Temas aprašančios funkcijos prasideda theme_...(), kur vietoje daugtaškio parašomas temos pavadinimas. Mano mėgstamas pasirinkimas – juodai balta tema, kurią sukuria funkcija theme_bw(). Standartinė tema theme_grey(). Daugiau temų – ggplot2 atmintinėje bei specializuoto ggthemes paketo dokumentacijoje .

gg + theme_grey()

gg + theme_bw()

gg + theme_dark()


Užduotis 14.23 Užsikraukite duomenų lentelę Orange (apelsinmedžiai) iš paketo datasets:

  1. Sistema ggplot2 nusibraižykite sklaidos diagramą, kurios x ašyje būtų kintamojo age reikšmės, o y ašyje – circumference.
  2. Po to nusibraižykite tokį patį grafiką, kaip 1 punkte, tik papildomai spalvomis atvaizduokite kintamojo Tree reikšmes.
  3. Grafiką priskirkite objektui pavadinimu gg3.
  4. Objekte gg3 esantį grafiką patobulinkite pridėdami lietuviškus spalvų legendos ir ašių pavadinimus bei grafiko pavadinimą (pastaba: turi būti nustatyta lietuviškoji lokalė);
  5. Išbandykite visas aštuonias ggplot2 atmintinėje esančias temas (vieną temą vienu metu).

14.12 Temos nustatymas visiems grafikams

Temą galima nustatyti visiems grafikams iš karto naudojant funkciją theme_set() ir joje nurodant temą aprašančią funkciją. Pavyzdyje naudosime objektą gg, sukurtą praeitame skyriuje.

# Nustatoma standartine pilka ggplot2 tema
theme_set(theme_grey())
gg # atspausdinamas objektas `gg`

# Nustatoma klasikine tema
theme_set(theme_classic())
gg # atspausdinamas objektas `gg`

# Nustatoma juodai balta tema
theme_set(theme_bw())
gg # atspausdinamas objektas `gg`


Užduotis 14.24 Naudodamiesi lentele iris, nusibraižykite pasklaidytų taškų diagramą. Naudodamiesi šiuo grafiku išbandykite, kaip veikia funkcija theme_set().

14.13 Ženklinimai ir pažymėjimai

Į sistemos „ggplot2“ grafikus galima įterpti įvairių ženklinimo elementų, linijų, rodyklių, kvadratų, etikečių užrašų. Apie tai plačiau rašoma atmintinėje ir paketo dokumentacijos tinklalapyje.

Horizontali linija

Pavyzdys, kaip prie grafiko pridėti horizontalią pastorintą liniją ties y=0.5.

gg + geom_hline(yintercept = 0.5, lwd = 1)

Jei norėtume kelių linijų, naudotume funkciją c().

gg + geom_hline(yintercept = c(0.5, 0.8, 1.9), lwd = 1)

Kiekvienos linijos specifikacijas galima nurodyti kartu, pateikiant vieną spalvą ar vieną skaičių, kaip pavyzdyje aukščiau (pvz., lwd = 1), arba kiekvienai atskirai, kaip pavyzdyje žemiau (pvz., lwd = c(.2, 1, .2)).

gg + geom_hline(yintercept = c(0.1, 0.5, 0.7), lwd = c(.2, 1, .2))

Vertikali linija

Pavyzdys, kaip prie grafiko pridėti vertikalią raudoną liniją ties x=6.

gg + geom_vline(xintercept = 6, color = "red")


Užduotis 14.25 Grafike, kuris rodomas šio skyriaus pavyzdyje, atidėkite žalią brūkšniuotą vertikalią ženklinimo liniją ties x = 5.

14.14 Statistinės transformacijos

Ar pastebėjote, kad naudojant geom_bar(), geom_histogram(), geom_density() ir panašias funkcijas nurodomos tik x reikšmės. Tuo tarpu y reikšmės apskaičiuojamos funkcijos viduje ir nubraižomos grafike.

Viena iš statistines transformacijas vykdančių funkcijų yra geom_smooth() braižanti tendencijos linijas.

ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) +
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) +
  geom_point() +
  geom_smooth(method = "lm")
## `geom_smooth()` using formula 'y ~ x'

Čia „lm“ reiškia linear model, t. y, nubraižoma geriausiai taškus apibūdinanti tiesė.


Užduotis 14.26 Naudodami duomenų lentelę iris nubrėžkite sklaidos diagramą. Rūšis pažymėkite skirtingomis spalvomis. Pridėkite tendencijos liniją. Kaip ji atrodo?

14.15 Koordinačių sistemos

Sistemoje ggplot2 funkcijos, kurios prasideda coord_, pakeičia koordinačių sistemą. Pvz., coord_flip() sukeičia x ir y ašis vietomis. coord_polar() grafiką nubraižo polinėje koordinačių sistemoje ir taip stulpelinė diagrama tampa skrituline. Daugiau apie šias funkcijas skaitykite atmintinėje ir dokumentacijos tinklalapyje.

bar <- ggplot(data = diamonds) +
  geom_bar(
    mapping = aes(x = cut, fill = cut),
    show.legend = FALSE,
    width = 1
  ) +
  theme(aspect.ratio = 1) +
  labs(x = NULL, y = NULL)

bar + coord_flip()

bar + coord_polar()


Užduotis 14.27

  1. Naudodamiesi lentele CO2, nubrėžkite stačiakampę diagramą. Prie grafiko kodo pridėkite coord_flip(). Kaip atrodo grafikas?
  2. Naudodamiesi lentele iris, nubrėžkite sklaidos diagramą. Prie grafiko kodo pridėkite coord_equal(). Kaip pasikeitė grafikas? Pabandykite padidinti arba sumažinti šį grafiką (pvz., didindami arba mažindami „Plots“ langą, kuriame yra grafikas). Ką pastebite?

14.16 Grafikų išsaugojimas

Grafikų išsaugojimui gali būti naudojama funkcija ggsave() arba „RStudio“ „Plots“ lango mygtukas „Export“ (pav. 14.2).

Išsaugokime objektą bar iš praeito skyriaus kaip 10×10 cm „PNG“ formato grafiką.

ggsave("barplot.png", plot = bar, width = 10, height = 10, units = "cm")

Išsaugomo grafiko tipą (JPG, PNG, TIFF, PDF ir kt.) sistema ggplot2 parenka pagal išsaugomos bylos pavadinimo plėtinį (pvz., .jpg, .png ir t.t.).

Užduotis 14.28 Naudodami duomenų lentelę women iš paketo datasets nubraižykite moterų ūgio priklausomybę nuo svorio. Grafiką išsaugokite „JPG“ formatu pavadindami „moteru_duomenys.jpg“ kaip 12×10 cm paveikslą. Išsaugotą paveikslą atsidarykite (nebūtinai programiškai).


„RStudio“ grafiku išsaugojimo meniu.

Pav. 14.2: „RStudio“ grafiku išsaugojimo meniu.


Užduotis 14.29 Savo nuožiūra susikurkite ggplot2 grafiką. Jis turi atsirasti „RStudio“ „Plots“ lange (kodą spausdinkite konsolėje). Naudodami mygtuką „Export“, grafiką išsaugokite:

  1. kaip bylą kietajame diske „.jpg“ formatu. Išsaugotą grafiką atsidarykite.
  2. į iškarpinę (angl. clipboard). Tada įklijuokite į „Word“ (ar analogišką) dokumentą spausdami Ctrl+V. Ar pavyko tai atlikti?

14.17 Šablonas ggplot2 grafikui

Sistemos ggplot2 grafikas gali būti sukurtas naudojant tokią „formulę“, kur didžiosiomis raidėmis parašyta kodo dalis turėtų būti pakeista pagal poreikius:

ggplot(data = <DUOMENYS>) +
  GEOM_FUNKCIJA(
     mapping = aes(<ESTETINIS_IŠDĖSTYMAS>),
     stat = <STATISTINĖ_TRANSFORMACIJA>,
     position = <POZICIJA>
  ) +
  KOORDINACIU_SISTEMOS_FUNKCIJA() +
  FACECIU_FUNKCIJA() +
  PAVADINIMU_FUNKCIJA() +
  SKALIU_FUNKCIJA() +
  KITI_ELEMENTAI() +
  PAGRINDINE_TEMA() +
  TEMOS_KOREKCIJOS()

Klausimai ir komentarai