3. nodaļa. Formas

ggplot2 sistēmā ir iespējams vienus un tos pašus datus attēlot dažādos veidos, izvēloties atbilstošo datu attēlošanas formu jeb geom_...(). Vairumā gadījumu ir jānorāda x un y vērtības, bet atsevišķos gadījumos ir nepieciešami arī papildus mainīgie, vai arī nepieciešamas tikai x vērtības (piemēram, histogrammai).

3.1 geom_point()

Ar geom_point() ir iespējams veidot izkliedes attēlus (scatterplot) (3.1 attēls).

library(ggplot2)
ggplot(CO2,aes(conc,uptake)) + geom_point()
Izkliedes attēla piemērs

3.1 attēls. Izkliedes attēla piemērs

Punktiem ir iespējams mainīt krāsu (color =), formu (shape =), lielumu (size =) un caurspīdīgumu (alpha =). Mainot šos parametrus ir jānolemj pēc kādiem principiem tas notiks - parametrs būs vienāds visiem punktiem, vai arī tas mainīsies atkarībā no kāda cita mainīgā datos.

Ja parametram ir jābūt vienādam visiem punktiem, tad tas ir jānorāda ārpus funkcijas aes() pašā geom_...() vai ggplot() funkcijā. Toties, ja parametram ir jāmainās atkarībā no mainīgā, tad tas obligāti jāliek funkcijā aes().

Šajā piemērā punktu krāsa un lielums ir mainīts visiem punktiem uzreiz (3.2 attēls). Krāsu var norādīt kā tās anglisko nosaukumu (tos var apskatīt ar funkciju colors()) vai arī izmantojot heksadecimālo kodu.

ggplot(CO2, aes(conc, uptake)) + geom_point(color = "green", size = 2)
Izkliedes attēls, kurā krāsa un lielums visiem punktiem vienāds

3.2 attēls. Izkliedes attēls, kurā krāsa un lielums visiem punktiem vienāds

Ja arguments color = atrodas aes() iekavās un tas ir atkarīgs no kāda mainīgā, tad punktu krāsa mainīsies atbilstoši vērtībām, kā arī parādīsies atbilstošā leģenda. Krāsu maiņa un leģendas veids ir atkarīgs no tā, kāda veida mainīgais ir izmantots. Ja krāsa ir atkarīga no kategorijas mainīgā, tad krāsas mainīsies diskrēti (3.3 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point()
Izkliedes attēls, kurā krāsa ir atkarīga no kategorijas mainīgā

3.3 attēls. Izkliedes attēls, kurā krāsa ir atkarīga no kategorijas mainīgā

Toties norādāt kā mainīgo tādu, kas ir skaitlisks, krāsa mainīsies kā gradients (3.4 attēls).

ggplot(CO2, aes(conc, uptake, color = uptake)) + geom_point()
Izkliedes attēls, kurā krāsa ir atkarīga no skaitliska mainīgā

3.4 attēls. Izkliedes attēls, kurā krāsa ir atkarīga no skaitliska mainīgā

Punktu forma var mainīties tikai atkarībā no kategorijas mainīgā (3.5 attēls).

ggplot(CO2, aes(conc, uptake, shape = Type)) + geom_point()
Izkliedes attēls, kurā forma ir atkarīga no kategorijas mainīgā

3.5 attēls. Izkliedes attēls, kurā forma ir atkarīga no kategorijas mainīgā

Ir iespējams panākt arī, ka, piemēram, punktu forma mainās atkarībā no viena mainīgā, bet krāsa atkarībā no cita mainīgā. Šajā gadījumā parādīsies arī divas leģendas (3.6 attēls).

ggplot(CO2, aes(conc, uptake, shape = Type, color = Treatment)) + 
      geom_point()
Izkliedes attēls, kurā forma un krāsa ir atkarīga no dažādiem kategorijas mainīgajiem

3.6 attēls. Izkliedes attēls, kurā forma un krāsa ir atkarīga no dažādiem kategorijas mainīgajiem

3.2 geom_bar()

Stabiņu attēlus veido ar funkciju geom_bar(). Šai funkcijai aes() ir jānorāda tikai x vērtības (diskrētas), jo novērojumu skaits katrā klasē tiek saskaitīts automātiski (geom_bar() balstās un stat_count()) (3.7 attēls).

ggplot(mpg, aes(drv)) + geom_bar()
Stabiņu attēla piemērs

3.7 attēls. Stabiņu attēla piemērs

Stabiņu attēlā katram stabiņa ir iespējams mainīt krāsu (color =) un aizpildījumu (fill =). Arguments color = nosaka līnijas krāsu apkārt katram no stabiņiem, bet fill = nosaka paša stabiņa krāsu (aizpildījumu) (3.8 attēls).

ggplot(mpg, aes(drv)) + geom_bar(fill = "white", color = "red")
Stabiņu attēls, kurā stabiņu krāsa un aizpildījums visiem vienāds

3.8 attēls. Stabiņu attēls, kurā stabiņu krāsa un aizpildījums visiem vienāds

Padarot aizpildījumu atkarīgu no kāda kategrijas mainīgā, izveidojas stabiņu attēls, kur pie katras x mainīgā kategorijas, stabiņš ir sadalītas pa daļām balstoties uz jauno mainīgo (3.9 attēls).

ggplot(mpg, aes(drv, fill = factor(cyl))) + geom_bar()
Stabiņu attēls, kurā stabiņu aizpildījums atkarīgs no mainīgā

3.9 attēls. Stabiņu attēls, kurā stabiņu aizpildījums atkarīgs no mainīgā

Pieliekot argumentu position = "dodge", var panākt, ka pie katras x kategorijas stabiņi ir viens otram blakus, nevis viens virs otra (3.10 attēls).

ggplot(mpg, aes(drv, fill = factor(cyl))) + geom_bar(position = "dodge")
Stabiņu attēls, kurā stabiņu aizpildījums atkarīgs no mainīgā

3.10 attēls. Stabiņu attēls, kurā stabiņu aizpildījums atkarīgs no mainīgā

3.3 geom_col()

Gadījumos, kad dati ir jau apkopoti un ir nepieciešams izveidot stabiņu attēlu, tad labāk izmantot geom_col(), kam jānorāda gan x vērtības, gan arī atbilstošās y vērtības (skaiti) (3.11 attēls).

dati <- data.frame(Dzimums = c("S", "V"), Skaits = c(23, 45))
dati
##   Dzimums Skaits
## 1       S     23
## 2       V     45
ggplot(dati, aes(Dzimums, Skaits)) + geom_col()
Stabiņu attēls, kurā skaiti jau doti tabulā

3.11 attēls. Stabiņu attēls, kurā skaiti jau doti tabulā

3.4 geom_line()

Datu punktu savienošanai ar līniju var izmantot geom_line(), kas savieno punktus no mazākās x vērtības līdz lielākajai x vērtībai (3.12 attēls).

ggplot(mpg, aes(cty, hwy)) + geom_line()
Līniju diagrammas piemērs

3.12 attēls. Līniju diagrammas piemērs

Līnijām ir iespējams mainīt tās platumu (linewidth =), krāsu (color =) un līnijas veidu (linetype =) (3.13 attēls).

ggplot(mpg, aes(cty, hwy)) + 
      geom_line(color = "red", linewidth = 1.5, linetype=2)
Līnija ar izmainītiem parametriem

3.13 attēls. Līnija ar izmainītiem parametriem

Ja kāds no līnijas parametriem ir atkarīgs no diskrēta trešā mainīgā, tad parādīsies tik daudz līnijas, cik mainīgajam ir līmeņi (3.14 attēls).

ggplot(mpg, aes(cty, hwy, color = drv)) + geom_line()
Līnija, kuras krāsa atkarīga no mainīgā

3.14 attēls. Līnija, kuras krāsa atkarīga no mainīgā

3.5 geom_path()

Līniju diagrammai līdzīgs ir arī geom_path(), bet šajā gadījumā punkti tiek savienoti tādā secībā, kādā tie parādās datu tabulā (3.15 attēls). geom_path() ir īpaši noderīgs gadījumos, ja jāsavieno x un y koordinātes, piemēram, attēlojot pārvietošanās ceļam.

ggplot(mpg, aes(cty, hwy)) + geom_path()
Punkti, kas savienoti ar līniju to izvietojuma secībā

3.15 attēls. Punkti, kas savienoti ar līniju to izvietojuma secībā

3.6 geom_boxplot()

Vērtībamplitūdas diagrammas veidošanai izmanto geom_boxplot(). Šim attēla veida x vērtībām ir jābūt kvalitatīviem datiem, vai arī skaitliskiem datiem, kas pārvērsti par faktoru. y vērtībām obligāti ir jābūt skaitliskām (3.16 attēls).

ggplot(CO2, aes(Type, uptake)) + geom_boxplot()
Vērtībamplitūdas diagrammas piemērs

3.16 attēls. Vērtībamplitūdas diagrammas piemērs

Līdzīgi kā stabiņu attēlam vērtībamplitūdas diagrammā var mainīt līniju un punktu krāsu (color =) vai arī “kastītes” aizpildījumu (fill =) (3.17 attēls).

ggplot(CO2, aes(Type, uptake)) + 
      geom_boxplot(color = "darkgreen", fill = "salmon")
Vērtībamplitūdas diagramma ar izmainītu līniju un kastītes krāsu

3.17 attēls. Vērtībamplitūdas diagramma ar izmainītu līniju un kastītes krāsu

Izlēcēju (neraksturīgo vērtību) punktu krāsu, formu un izmēru var mainīt arī atsevišķi, izmantojot argumentus outlier.color =, outlier.shape = un outlier.size = (3.18 attēls).

ggplot(CO2, aes(Type, uptake)) + 
      geom_boxplot(outlier.color = "red", outlier.shape = 13, outlier.size = 3)
Vērtībamplitūdas diagramma ar izmainītu izlēcēju krāsu, formu un izmēru

3.18 attēls. Vērtībamplitūdas diagramma ar izmainītu izlēcēju krāsu, formu un izmēru

Ja arguments fill = atrodas funkcijas aes() iekavās un tas ir atkarīgs no kāda mainīgā, tad pie katras atbilstošās x vērtības, vērtībamplitūdas diagramma tiek sadalīta tik daļās, cik līmeņi ir papildus mainīgajam, kā arī parādās atbilstošā leģenda ar izmantotajām aizpildījuma krāsām (3.19 attēls).

ggplot(CO2, aes(Type, uptake, fill = Treatment)) + 
      geom_boxplot()
Vērtībamplitūdas diagramma, kurā katram faktora līmenim diagramma sadalīta daļās

3.19 attēls. Vērtībamplitūdas diagramma, kurā katram faktora līmenim diagramma sadalīta daļās

3.7 geom_count()

Gadījumos, kad nepieciešams attēlot izkliedes diagrammu, bet ir vērojama punktu pārklāšanās (pie vienādām x un y vērtībām ir vairāki novērojumi), var izmantot geom_count(), kas parāda cik daudz novērojumu ir konkrētajām x un y vērtībām (3.20 attēls).

ggplot(mpg, aes(cty, hwy)) + geom_count()
Izkliedes diagramma, kur punktu lielums atkarīgs no novērojumu skaita

3.20 attēls. Izkliedes diagramma, kur punktu lielums atkarīgs no novērojumu skaita

Ja aes() funkcijā norāda argumentu size = after_stat(prop), tad punktu lielums ir parāda proporciju, nevis skaitu (3.21 attēls).

ggplot(mpg, aes(cty, hwy)) + geom_count(aes(size=after_stat(prop)))
Izkliedes diagramma, kur punktu lielums atbilst novērojumu proporcijai

3.21 attēls. Izkliedes diagramma, kur punktu lielums atbilst novērojumu proporcijai

3.8 geom_histogram()

Histogrammas veidošanai izmanto funkciju geom_histogram(), kam ir nepieciešamas tikai x vērtības. Pēc noklusējuma dati tiek dalīti trīsdesmit klasēs (3.22 attēls).

ggplot(CO2, aes(uptake)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Histogrammas piemērs

3.22 attēls. Histogrammas piemērs

Ar argumentu binwidth = ir iespējams mainīt dalījuma klases lielumu, tādēji mainot klašu skaitu un histogrammas izskatu (3.23 attēls). Var arī norādīt vēlamo klašu skaitu ar argumenti bins =.

ggplot(CO2, aes(uptake)) + geom_histogram(binwidth = 10)
Histogrammas ar mainītu klases lielumu

3.23 attēls. Histogrammas ar mainītu klases lielumu

Tā kā histogrammā parādās stabiņi, tad tiem ir iespējams mainīt gan līnijas krāsu (color =), gan arī aizpildījumu (fill =) (3.24 attēls).

ggplot(CO2,aes(uptake)) + 
      geom_histogram(color = "darkgreen", fill = "white", binwidth = 10)
Histogrammas ar mainītu izskatu

3.24 attēls. Histogrammas ar mainītu izskatu

Norādot, ka aizpildījums ir atkarīgs no mainīgā, izveidosies histogramma, kurā katrs stabiņš sadalīts daļās atbilstoši novērojumu skaitam katrā no līmeņiem (3.25 attēls).

ggplot(CO2, aes(uptake, fill = Type)) + 
      geom_histogram(binwidth = 5)
Histogrammas, kur aizpildījums atkarīgs no mainīgā

3.25 attēls. Histogrammas, kur aizpildījums atkarīgs no mainīgā

3.9 geom_abline(), geom_hline() un geom_vline()

Ja attēlam ir nepieciešams pievienot diagonālu, horizontālu vai vertikālu līniju, tad jāizmanto attiecīgi geom_abline(), geom_hline() vai geom_vline().

Diagonālas līnijas pievienošanai jānorāda divas vērtības: slope = (norāda slīpumu) un intercept = (norāda, kur krusto y asi, ja x = 0) (3.26 attēls).

ggplot(CO2, aes(conc, uptake)) + geom_point() + 
      geom_abline(intercept = 5, slope = 0.04)
Izkliedes diagramma ar pievienotu diagonālu līniju

3.26 attēls. Izkliedes diagramma ar pievienotu diagonālu līniju

Horizontālas līnijas pievienošanai izmanto geom_hline(), kurai kā arguments jānorāda yintercept = (kādai y vērtībai atbilst līnija) (3.27 attēls).

ggplot(CO2, aes(conc, uptake)) + geom_point() + 
      geom_hline(yintercept = 20)
Izkliedes diagramma ar pievienotu horizontālu līniju

3.27 attēls. Izkliedes diagramma ar pievienotu horizontālu līniju

Pie argumentu yintercept = var norādīt arī uzreiz vairākas vērtības, kā redzultātā parādīsies vairākas līnijas (3.28 attēls).

ggplot(CO2, aes(conc, uptake)) + geom_point() + 
      geom_hline(yintercept = c(20, 30, 40))
Izkliedes diagramma ar pievienotām vairākām horizontālām līnijām

3.28 attēls. Izkliedes diagramma ar pievienotām vairākām horizontālām līnijām

Līnijas novietojums var būt atkarīgs no kāda mainīgā datos, tikai šajā gadījumā argumentam yintercept = jāatrodas funkcijā aes() (3.29 attēls).

dati.papildus <- data.frame(limeni = c(10,20,30,40))
ggplot(CO2, aes(conc, uptake)) + geom_point() + 
      geom_hline(data = dati.papildus, aes(yintercept = limeni))
Izkliedes diagramma ar pievienotu horizontālu līniju

3.29 attēls. Izkliedes diagramma ar pievienotu horizontālu līniju

Vertikālas līnijas pievieno ar funkciju geom_vline() un argumentu xintercept = (kādai x vērtībai atbilst līnija) (3.30 attēls). Pārējie darbības principi ir līdzīgi geom_hline().

ggplot(CO2, aes(conc, uptake)) + geom_point() + 
      geom_vline(xintercept = 500)
Izkliedes diagramma ar pievienotu vertikālu līniju

3.30 attēls. Izkliedes diagramma ar pievienotu vertikālu līniju

3.10 geom_jitter()

Gadījumos, kad nepieciešams izveidot izkliedes (punktu) diagrammu, bet vērojam vērtību pārklāšanās (daudz identisku vērtību), var izmantot geom_jitter(), kur punktiem tiek veikta neliela nobīde x vai y (vai abu) ass virzienā, lai novērstu pārklāšanos. Šādu attēlošanas veidu sevišķi ērti izmantot, ja x vērtības ir kategorijas mainīgais, jo tad izkliede notiek tikai x ass virzienā, bet y ass virzienā redzamas reālās vērtības (3.31 attēls).

ggplot(CO2,aes(Type, uptake)) + geom_jitter()
Izkliedes diagramma, kurā x virzienā nejauši mainīts punktu izvietojums

3.31 attēls. Izkliedes diagramma, kurā x virzienā nejauši mainīts punktu izvietojums

geom_jitter() ir labi izmantot kombinācijā ar geom_boxplot(), jo tādējādi gan parādās reālās vērtības, gan arī vērtību apkopojums (3.32 attēls).

ggplot(CO2,aes(Type, uptake)) + geom_boxplot() + 
      geom_jitter()
Izkliedes diagrammas un vērtībamplitūdas diagrammas kombinācija

3.32 attēls. Izkliedes diagrammas un vērtībamplitūdas diagrammas kombinācija

geom_jitter() un geom_boxplot() var kombinēt arī gadījumos, kad vērtībamplitūdas diagramma ir sadalīta atbilsotīs trešā mainīgā līmeņiem, bet šajā gadījumā papildus ir jānorāda arguments position = position_jitterdodge(), lai punktu izvietojums atbilstu reālajam vērtību sadalījumam pa līmeņiem (3.33 attēls).

ggplot(CO2,aes(Type, uptake, fill = Treatment)) + geom_boxplot() + 
      geom_jitter(position = position_jitterdodge())
Izkliedes diagrammas un vērtībamplitūdas diagrammas kombinācija gadījumā, kad iesaistīts trešais mainīgais dalījuma līmeņiem

3.33 attēls. Izkliedes diagrammas un vērtībamplitūdas diagrammas kombinācija gadījumā, kad iesaistīts trešais mainīgais dalījuma līmeņiem

3.11 geom_smooth()

Ja ir vēlme attēlam pievienot trenda līniju, tad jāizmanto geom_smooth(). Pēc noklusējuma izveidojas izlīdzīnātā trenda līnija un tās ticamības intervāls ar metodi loess vai gam (3.34 attēls).

ggplot(CO2, aes(conc, uptake)) + geom_point() + 
      geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Izkliedes diagrammas ar pievienotu trenda līniju

3.34 attēls. Izkliedes diagrammas ar pievienotu trenda līniju

Lineārās trenda līnijas pievienošanai, jānorāda arguments method = "lm" (3.35 attēls).

ggplot(CO2, aes(conc, uptake)) + geom_point() + 
      geom_smooth(method = "lm")
## `geom_smooth()` using formula = 'y ~ x'
Izkliedes diagrammas ar pievienotu lineāro trenda līniju

3.35 attēls. Izkliedes diagrammas ar pievienotu lineāro trenda līniju

Ar argumentu se = FALSE var noņemt ticamības intervālu (3.36 attēls).

ggplot(CO2, aes(conc, uptake)) + geom_point() + 
      geom_smooth(method = "lm", se = FALSE)
## `geom_smooth()` using formula = 'y ~ x'
Izkliedes diagrammas ar pievienotu lineāro trenda līniju, toties bez ticamības intervāla

3.36 attēls. Izkliedes diagrammas ar pievienotu lineāro trenda līniju, toties bez ticamības intervāla

Trenda līnijas krāsu maina ar argumentu color =, bet ticamības intervāla aizpildījumu ar argumentu fill =. Ja vienu vai abus no šiem argumentiem norāda aes() iekavās un tas ir atkarīgs no kāda mainīgā, tad trenda līnijas tiek izveidotas katram līmenim (3.37 attēls).

ggplot(CO2, aes(conc, uptake)) + geom_point() + 
      geom_smooth(method = "lm", aes(color = Type, fill = Type))
## `geom_smooth()` using formula = 'y ~ x'
Izkliedes diagrammas ar pievienotu lineāro trenda līniju dažādiem līmeņiem

3.37 attēls. Izkliedes diagrammas ar pievienotu lineāro trenda līniju dažādiem līmeņiem

Trenda līniju var veidot ne tikai izmantojot esošo formulu y ~ x, bet arī izmantojot kādu citu saistību starp abiem mainīgajiem. Šajā gadījumā jāizmanto arguments formula = un jālieto apzīmējumi x un y, nevis oriģinālie mainīgo nosaukumi (3.38 attēls).

ggplot(CO2, aes(conc, uptake)) + geom_point() + 
      geom_smooth(method = "lm", formula = y ~ x + I(x^2))
Izkliedes diagrammas ar pievienotu īpašu trenda līniju

3.38 attēls. Izkliedes diagrammas ar pievienotu īpašu trenda līniju

3.12 geom_violin()

Īpašs datu attēlošanas veids ir geom_violin(), kas sevī apvieno gan vērtībamplitūdas diagrammas īpašības, gan arī blīvuma attēla īpašības. Pēc būtības tas ir blīvuma attēls, kurā vērtību blīvuma funkcijas attēlojums dots spoguļattēlā (3.39 attēls).

ggplot(CO2, aes(Type, uptake)) + geom_violin()
geom_violin() attēls

3.39 attēls. geom_violin() attēls

Ar argumentu draw_quantiles = attēlu var papildināt ar kvantiļu pozīcijām (3.40 attēls).

ggplot(CO2, aes(Type, uptake)) + 
      geom_violin(draw_quantiles = c(0.25, 0.5, 0.75))
geom_violin() attēls ar pievienotām kvartilēm

3.40 attēls. geom_violin() attēls ar pievienotām kvartilēm

Pievienojot argumenu fill = funkcijā aes(), attēls tiek sadalīts katram no faktora līmeņiem (3.41 attēls).

ggplot(CO2,aes(Type, uptake)) +
      geom_violin(aes(fill = Treatment))
geom_violin() attēls sadalīts pa līmeņiem

3.41 attēls. geom_violin() attēls sadalīts pa līmeņiem