
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:
- 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“ :
- Paaiškinkite grafikos gramatikos idėją.
- Grafikos gramatikos elementų sluoksniai:
- Kiek yra grafikos gramatikos sluoksnių rūšių iš viso?
- Kurie sluoksniai yra pagrindiniai (privalomi)? Išvardinkite.
- 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:
- Užsikrauti reikiamus paketus;
- Jei reikia, pakeisti nustatymus (pvz., nustatyti reikiamą lokalę);
- Į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ą:
::check_installed_packages("ggplot") bio
Užsikraukime paketus:
library(ggplot2)
library(dplyr)
Arba tiesiog:
library(tidyverse)
Toliau atlikite užduotis 14.3.
Užduotis 14.3
- 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.
- Susikurkite naują „RStudio“ projektą.
- 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.
- Paketų užkrovimas ir nustatymų keitimas:
- 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ą. - Š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. - Sukurkite naują (antrą) skyrių pavadintą „Nustatymai“. Jame rašysime nustatymus, bendrus visai analizei.
- Nustatymų skyriuje parašykite kodą, kuris pakeičia „R“ lokalę į lietuviškąją. Pvz., „Windows“ vartotojai turi parašyti
Sys.setlocale(locale = "Lithuanian")
. - Dokumentą išsaugokite, pvz., paspaudę Ctrl+S. Dokumentą rekomenduojama išsaugokti reguliariai.
- Į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.
- 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., „
- Resursų peržiūrėjimas ir atsisiuntimas:
- 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.
- 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.
- 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ų į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
- Dokumente „ggplot2-grafikai.R“ susikurkite skyrių „Duomenų įkėlimas“. Šiam tikslui naudinga greitoji klavišų kombinacija Ctrl+Shift+R.
- Iš „R“ paketo datasets įsikelkite duomenis
trees
,CO2
,BOD
,iris
.- Kodą įrašykite skyriuje „Duomenų įkėlimas“.
- Kodą įvykdykite.
- Sukurkite skyrių „Duomenų peržiūra“.
- Skyriuje „Duomenų peržiūra“ patyrinėkite duomenų struktūrą naudodami
glimpse()
,View()
ir kitas reikiamas komandas. - Jei reikia, peržvelkite duomenų lentelių aprašymus dokumentacijoje.
- 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()

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
- Dokumente „ggplot2-grafikai.R“ susikurkite naują skyrių „Pirmasis grafikas“.
- Į 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.
- 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 „
- 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:
- 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; - argumentą
data
– šioje vietoje nurodoma duomenų lentelė. Dauguma tidyverse šeimos funkcijų pasižymi tuo, kad pirmasis argumentas yra duomenų lentelė. Funkcijaggplot()
– viena iš jų; mapping
(liet. išdėstymas) – tai argumentas, kuriame aprašoma, kaip duomenys bus išdėstyti. Išdėstymas nurodomas funkcijosaes()
(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.- 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; - funkciją
geom_point()
– tai grafiko sluoksnis, kuris nurodo, kad duomenys bus atvaizduoti geometrinėmis figūromis – taškais. - 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:
- Norint sujungti kelis ggplot2 sluoksnius (komandas), naudojamas „+“ ženklas;
- Po šio ženklo, kita komanda įprastai rašoma iš naujos eilutės;
- „+“ rašomas arba tarp gretimų komandų toje pačioje eilutėje, arba eilutės gale.
- 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.7
- 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. - 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))
:
- Kas nubraižyta grafike?
- Kodėl nėra nei duomenis vaizduojančios linijos, nei taškų?
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):
x
,y
– išdėstymas x ir y ašyse;color
,colour
– pagrindinė spalva arba apvado spalva (ir amerikietiška, ir britiška rašyba tinka);fill
– užpildo spalva;alpha
– (ne)skaidrumas/(ne)permatomumas: 1 – visiškai nepermatomas, 0 – visiškai skaidrus;size
– dydis;group
– grupavimas, pvz., braižant linijas, skaičiuojant vidurkius. Jei pasirenkate vieną iš aukščiau aprašytų estetinių elementų, grupavimas vykdomas automatiškai;shape
,pch
– taško forma (pch – point character);stroke
– „potepio“ storis (pvz., taško apvado linijos storis);linetype
,lty
– linijos tipas;linewidth
,lwd
– linijos storis;label
– tekstas, etiketės reikšmė;- kiti.
Ne visos geometrinės figūros turi užpildo spalvą (parametrą fill
).
Plačiau apie šiuos grafinius elementus (su iliustracijomis) rašoma:
- ggplot2 tinklalapio straipsnyje „Aesthetic specifications“ (rekomenduoju peržvelgti paveikslus);
- knygos „Cookbook for R“ skyriuje „Shapes and line types“ .
Užduotis 14.10
- Įvykdykite kodą
?geom_point
. Atsidariusioje dokumentacijoje susiraskite skiltį „Aesthetics“.- Pažiūrėkite, kokie estetiniai elementai gali būti panaudoti braižant taškus?
- Kurie iš jų privalomi? (Pažymėta pajuodintai).
- Pirmo punkto užduotį pakartokite su
?geom_line
. - Nubraižykite sklaidos diagramas. Duomenų lentelės trees kintamųjų
Height
irGirth
reikšmes išdėstykite x ir y ašyse, oVolume
:- spalvomis;
- (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
- 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ų:- Kuo linijos skiriasi nuo taškų (kokios vienų ir kitų spalvos)?
- 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) skliaustuose.geom_point()
- 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.
- 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()
arggplot()
skliaustuose?
- 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.
- Preliminariai įvertinkite, kas įprastai įvyksta su kraujospūdžiu didinant vaisto dozę.
- Kuo skiriasi kontrolinės ir tiriamosios grupės atsakas:
- kai vaisto dozė ;
- kai vaisto dozė .
- 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:
- 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))
- 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
ir nebe funkcijosggplot()
skliaustuose, o konkrečiame sluoksnyje. Taip nurodomos reikšmės kartais dar vadinamos atributais.aes()
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.14 Peržvelkite šio skyriaus pavyzdžius:
- Kaip nurodomos bendros visam sluoksniui spalvos?
- Ar nurodant bendrą geometrinės figūros spalvą naudojamos funkcijos
ggplot()
arbaaes()
?
Konkrečios spalvos gali būti nurodomos keliais būdais:
- nurodant spalvos numerį nuo 1 iki 8 (būdas atėjo iš bazinės „R“ grafikų braižymo sistemos);
- nurodant anglišką spalvos pavadinimą kabutėse, pvz.,
"green"
. Visi „R“ esantys spalvų pavadinimai atspausdinami suveduscolors()
, spalvų demonstracija –demo("colors")
(spausdami „Enter“ matysite vis kitą paveikslą. Siūlau paveikslus smarkiai pasididinti); - 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)
.
::
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:
Užduotis 14.16
- Nueikite į tinklalapį „www.google.com“ ir paieškos langelyje parašykite
#9a5485
. Kokia tai spalva? - 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()
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:
- Nurodytas tik vienas kategorinis/diskretusis kintamasis:
geom_bar()
(stulpelinė diagrama).
- Nurodyti vienas kategorinis/diskretusis ir vienas tolydusis/skaitinis kintamasis:
geom_col()
(stulpelinė diagrama).
- Nurodytas tiktai vienas tolydusis kintamasis:
geom_density()
(branduolinio tikimybės tankio diagrama, BTD);geom_histogram()
(histograma).
- Nurodyti vienas kategorinis/diskretusis, kitas – tolydusis/skaitinis kintamieji:
geom_boxplot()
(stačiakampė diagrama);geom_violin()
(smuikinė diagrama);geom_jitter()
(pasklaidytų taškų diagrama).
- Nurodyti du tolydieji/skaitiniai:
geom_point()
(sklaidos diagrama);geom_line()
(linijų diagrama);geom_jitter()
(pasklaidytų taškų diagrama).
Štai keletas pavyzdžių (pavyzdžiuose color – apvado spalva, fill – užpildo spalva):
- 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")
- Vienas – kategorinis/diskretusis, o kitas – tolydusis/skaitinis (dažnių lentelės spausdinimas):
# Sukuriama dažniu lentele
data.frame(
darbuotojai <-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.
- 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.
- 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ų.
- 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()
Užduotis 14.18 Peržiūrėkite video epizodus:
- Duomenys iris:
- Kaip pasiskirsto kintamojo
Sepal.Width
reikšmės visoje imtyje? - Kaip pasiskirsto kintamojo
Petal.Width
reikšmės visoje imtyje? (Parinkite kito tipo grafiką); - Koks irisų rūšių skirstinys imtyje? Kurios rūšies daugiausiai?
- Kaip
Sepal.Length
priklauso nuoPetal.Length
? - Kaip
Petal.Length
reikšmės pasiskirsto pagal rūšis? - Kurios rūšies pogrupyje kintamojo
Sepal.Width
reikšmės įprastai yra didžiausios?
- Kaip pasiskirsto kintamojo
- Duomenys npk (iš „R“ paketo datasets). Nubraižykite kintamojo
yield
:- histogramą:
- geometrinę figūrą kuriančios funkcijos (
geom_histogram()
) skliaustuose nurodykite parametrusbins = 6, color = "black"
?;
- analizuodami šį grafiką nustatykite, kiek imtyje yra reikšmių, mažesnių už 65?
- geometrinę figūrą kuriančios funkcijos (
- branduolinio tankio grafiką;
- geometrinę figūrą kuriančios funkcijos (
geom_density()
) skliaustuose nurodykite parametrusadjust = 1.5, fill = "green4"
;
- 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);
- ką daro parametras
adjust
? (Paeksperimentuokite).
- geometrinę figūrą kuriančios funkcijos (
- stačiakampę diagramą (x ašyje atidėkite kintamojo „block“ reikšmes):
- Eilės tvarka išvardinkite blokus nuo turinčio didžiausią iki turinčio mažiausią duomenų centro padėtį;
- 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);
- Kuris blokas pasižymi didžiausia asimetrija?
- punkto c stačiakampių diagramų grafiką papildykite pasklaidytų taškų diagrama (
geom_jitter(width = 0.1)
):- Įvertinkite grupių dydžius kiekviename bloke;
- Ką daro parametras
width
?
- histogramą:
Duomenų centro padėtį įprastai nusako tokie dydžiai kaip vidurkis ar mediana .
Duomenų sklaidą – standartinis nuokrypis , kvartiliai ar tarpkvartilinis atstumas .
(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
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) grafikas <-
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
grafikas + geom_point()
grafikas2 <- grafikas2
Anksčiau išbandėme, kaip atrodo taškais atvaizduoti duomenys, dabar galime išbandyti linijas:
# Pridedamos linijos
grafikas + geom_line()
grafikas3 <- 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:- bangelė
~
ir kintamojo pavadinimas (pvz.,~A
). - jei norima išskirstyti pagal kelis kintamuosius, naudojamas
+
ženklas (pvz.,~A + B
);
- bangelė
facet_grid()
skliaustuose rašoma:- į eilutes išskaidančio kintamojo pavadinimas, bangelė
~
ir į stulpelius išskaidančio kintamojo pavadinimas (pvz.,A ~ B
). - jei norime vienos eilutės arba vieno stulpelio, vietoje kintamojo pavadinimo rašome tašką (pvz.,
. ~ A
– viena eilutė,A ~ .
– vienas stulpelis); - jei kintamųjų daugiau, galima naudoti
+
ženklą (pvz.,A ~ B + C
); - galioja ES taisyklė: pirma nurodomos eilutės, po to – stulpeliai.
- į eilutes išskaidančio kintamojo pavadinimas, bangelė
Pavyzdžiai:
ggplot(CO2, aes(x = conc, y = uptake, color = Type, group = Plant)) +
graf <- geom_line() +
geom_point()
# facet_wrap — vienas kintamasis
+ facet_wrap(~Type) graf
# facet_wrap — vienas keli kintamieji
+ facet_wrap(~ Type + Treatment) graf
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.
+ facet_wrap(~ Type + Treatment, ncol = 3) graf
# facet_grid
+ facet_grid(Type ~ Treatment) graf
# facet_grid — viena eilute
+ facet_grid(. ~ Treatment) graf
# facet_grid — vienas stulpelis
+ facet_grid(Treatment ~ .) graf
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
- Iš „R“ paketų užsikraukite lentelę iris ir peržvelkite ją naudodami
glimpse()
. Jei reikia, peržvelkite lentelės aprašymą.- Nusibraižykite sklaidos diagramą pagal
Sepal.Width
irPetal.Length
. Spalvas parinkite ir į facetes suskirstykite pagalSpecies
. - 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ę.
- Nusibraižykite sklaidos diagramą pagal
- Iš „R“ paketo datasets užsikraukite lentelę npk. Nubraižykite grafiką, kurio pavyzdys žemiau. Patarimai:
- Kintamųjų
block
iryield
reikšmes išdėstykite x ir y ašyse; - Spalvas išdėstykite pagal
P
; - Į facetes suskirstykite pagal
N
,P
irK
; - Facečių funkcijos viduje po formulės parašykite kodą
labeller = label_both
. Atkreipkite dėmesį, ką jis daro; - Reikiamoje vietoje padėkite kablelį.
- Kintamųjų
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ą:
ggplot(iris, aes(x = Sepal.Length, fill = Species, color = Species)) +
gg <- geom_density(alpha = 0.3, adjust = 1.5)
+ labs(x = "x ašis", y = "y ašis") gg
+ labs(
gg x = "x ašis",
y = "y ašis",
fill = "Spalvu legenda",
color = "Spalvu legenda"
)
`
+ labs(
gg 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("...")
.
+ ggtitle("Grafiko pavadinimas") gg
Ašių ir legendų pavadinimai – nurodyti naudojant funkcijas:
labs(x = "...", y = "...", color = "...", fill = "...")
;xlab("...")
;ylab("...")
.
+ ylab("<< Pasikeite pavadinimas Y >>") gg
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.
- Duomenys iris. Pagal pasirinkto kintamojo reikšmes nubrėžkite branduolinio tankio grafiką:
- Užpildas turi būti permatomas;
- Užpildo spalvos parinktos pagal kintamojo
Species
reikšmes. - Legendos pavadinimas turėtų būti pakeistas į „Rūšis“.
- 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 .
+ theme_grey() gg
+ theme_bw() gg
+ theme_dark() gg
Užduotis 14.23 Užsikraukite duomenų lentelę Orange (apelsinmedžiai) iš paketo datasets:
- Sistema ggplot2 nusibraižykite sklaidos diagramą, kurios x ašyje būtų kintamojo
age
reikšmės, o y ašyje –circumference
. - Po to nusibraižykite tokį patį grafiką, kaip 1 punkte, tik papildomai spalvomis atvaizduokite kintamojo
Tree
reikšmes. - Grafiką priskirkite objektui pavadinimu
gg3
. - 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ė); - 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())
# atspausdinamas objektas `gg` gg
# Nustatoma klasikine tema
theme_set(theme_classic())
# atspausdinamas objektas `gg` gg
# Nustatoma juodai balta tema
theme_set(theme_bw())
# atspausdinamas objektas `gg` gg
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 .
+ geom_hline(yintercept = 0.5, lwd = 1) gg
Jei norėtume kelių linijų, naudotume funkciją c()
.
+ geom_hline(yintercept = c(0.5, 0.8, 1.9), lwd = 1) gg
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)
).
+ geom_hline(yintercept = c(0.1, 0.5, 0.7), lwd = c(.2, 1, .2)) gg
Vertikali linija
Pavyzdys, kaip prie grafiko pridėti vertikalią raudoną liniją ties .
+ geom_vline(xintercept = 6, color = "red") gg
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ė.
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.
ggplot(data = diamonds) +
bar <- geom_bar(
mapping = aes(x = cut, fill = cut),
show.legend = FALSE,
width = 1
+
) theme(aspect.ratio = 1) +
labs(x = NULL, y = NULL)
+ coord_flip() bar
+ coord_polar() bar
Užduotis 14.27
- Naudodamiesi lentele
CO2
, nubrėžkite stačiakampę diagramą. Prie grafiko kodo pridėkitecoord_flip()
. Kaip atrodo grafikas? - Naudodamiesi lentele
iris
, nubrėžkite sklaidos diagramą. Prie grafiko kodo pridėkitecoord_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 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 cm paveikslą. Išsaugotą paveikslą atsidarykite (nebūtinai programiškai).

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:
- kaip bylą kietajame diske „.jpg“ formatu. Išsaugotą grafiką atsidarykite.
- į 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()