7. nodaļa. Attēla noformēšana

ggplot2 sistēmā izveidoto attēlu izskata mainīšanai var izmantot iepriekš sagatavotas attēla noformēšanas tēmas, vai arī var mainīt katru elementu atsevišķi. Mainot noformējumu, mainās tikai tās attēla daļas, kas nav saistītas attēlojamiem datiem.

7.1 Definētās attēla tēmas

Paketē ggplot2 ir definētas gatavas tēmas attēla izskata maiņai. Attēlā noformējums mainās, pieskaitot klāt atbilstošo tēmas funkciju. Katrā tēmā papildus ir iespējams mainīt pamatteksta izmēru (base_size =) un pamatfontu (base_family =). Gatovos tēmu noformējumus protams var papildināt arī ar citām izmaiņām konkrētiem elementiem. Attēlos 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8 un 7.9 parādīts kā izskatās sākotnējais attēls un kā tas mainās, izmantojot kādu no gatavajām tēmām.

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point()
Attēls bez papildus noformējuma

7.1 attēls. Attēls bez papildus noformējuma

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme_bw()
Attēls ar theme_bw()

7.2 attēls. Attēls ar theme_bw()

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme_classic()
Attēls ar theme_classic()

7.3 attēls. Attēls ar theme_classic()

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme_dark()
Attēls ar theme_dark()

7.4 attēls. Attēls ar theme_dark()

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme_grey()
Attēls ar theme_grey()

7.5 attēls. Attēls ar theme_grey()

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme_light()
Attēls ar theme_light()

7.6 attēls. Attēls ar theme_light()

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme_linedraw()
Attēls ar theme_linedraw()

7.7 attēls. Attēls ar theme_linedraw()

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme_minimal()
Attēls ar theme_minimal()

7.8 attēls. Attēls ar theme_minimal()

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme_void()
Attēls ar theme_void()

7.9 attēls. Attēls ar theme_void()

7.2 Atsevišķu attēla elementu mainīšana

Papildus jau definētajām attēla noformējuma tēmām, ir iespējams mainīt gandrīz katru no attēla elementiem atsevišķi, izmantojot funkciju theme() un atbilstošo elementa nosaukumu. Pilnu sarakstu ar elementu nosaukumiem var iegūt apskatot funkcijas theme() palīdzības lapu.

Elementu izskatu maiņa notiek pēc vienota principa - sākotnēji ir funkcija theme(), kurā kā arguments jānorāda maināmais elements, piemēram, axis.text.x = un tad nāk funkcija, kas norāda kāda izmaiņas veikt. Ir pieejamas trīs funkcijas element_text(), element_line() un element_rect(), kuras ir jāizraugas atbilstoši tam, kāda veida maināmais elements tas ir - teksts, līnija vai reģions (poligons). Katra elementa maiņa nav jāraksta savā theme() funkcijā, bet tie var būt vairāki argumenti vienā funkcijā.

Teksta elementiem (element_text()) var mainīt teksta fontu grupu (family =), fonta veida (face =), krāsu (color =), izmēru (size =), novietojumu horizentāli (hjust =) un vertikāli (vjust =), teksta leņķi (angle =), līnijas augstumu (lineheight =), atstarpes (margin =).

Līniju elementiem (element_line()) var mainīt krāsu (color =), līnijas biezumu (linewidth=), līnijas veidu (linetype =), līnijas nobeigumu (lineend =) un pievienot bultu (arrow =).

Reģiona jeb poligona elementiem (element_rect()) var mainīt aizpildījumu (fill =), krāsu līnijai apkārt reģionam (color =), līnijas biezumu (linewidth =) un līnijas veidu (linetype =).

Ir pieejama arī speciāla funkcija element_blank(), kas no attēla noņems atbilstošo elementu, turklāt “pazudīs” arī šim elementam atvēlētā vieta, ja tas būs, piemēram, asu paraksts, vai asu apzīmējumi.

7.2.1 Attēla virsraksts

Attēla virsraksta izskatu (bet ne tā saturu) maina ar argumentu plot.title =.

Pirmajā piemēra teksta virsraksts pārveidots zaļā krāsā, 20 fonta izmērā un slīprakstā (7.10 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      labs(title = "CO2 attēls")+
      theme(plot.title = element_text(colour = "darkgreen",
                                      size = 20,
                                      face = "italic"))
Attēls ar mainītu virsraksta izskatu

7.10 attēls. Attēls ar mainītu virsraksta izskatu

Virsraksts automātiski ir novietots attēla kreisajā pusē. To var izmainīt ar argumentu hjust = un vērtību 0.5 (0 - kreisā mala, 1 - labā mala, 0.5 - pa vidu) (7.11 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      labs(title = "CO2 attēls")+
      theme(plot.title = element_text(hjust = 0.5))
Attēls ar mainītu virsraksta novietojumu

7.11 attēls. Attēls ar mainītu virsraksta novietojumu

Ja attēlam ir arī apakšvirsraksts, tad tā izskatu maina ar argumentu plot.subtitle = (7.12 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      labs(title = "CO2 attēls", subtitle = "Koncentrācijas ietekme")+
      theme(plot.subtitle = element_text(face = "bold",
                                         colour = "blue"))
Attēls ar mainītu apakšvirsrakstu

7.12 attēls. Attēls ar mainītu apakšvirsrakstu

7.2.2 Asu paraksti

Asu parakstu maiņa notiek ar elementu axis.title = (abas asis vienlaicīgi), vai axis.title.x = un axis.title.y = mainot katras ass izskatu atsevišķi.

Asu paraksti arī ir teksts, tāpēc izmantojama funkcija element_text() (7.13 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(axis.title = element_text(size = 15,
                                      face = "bold"))
Attēls ar vienādu asu parakstu noformējumu

7.13 attēls. Attēls ar vienādu asu parakstu noformējumu

Izmantojot argumentus axis.title.x = un axis.title.y = var mainīt katru asi atsevišķi, piemēram, vienais asij noņemot parakstu, bet otrai to izmainot (7.14 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(axis.title.x = element_blank(),
            axis.title.y = element_text(colour = "red"))
Attēls ar x asi bez paraksta

7.14 attēls. Attēls ar x asi bez paraksta

7.2.3 Asu apzīmējumi

Apzīmējumus pie asīm (skaitļus vai līmeņu nosaukumus) maina ar argumentiem axis.text =, axis.text.x =, vai axis.text.y = (7.15 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(axis.text.x = element_text(angle = 45, hjust = 1),
            axis.text.y = element_text(angle = 90, hjust = 0.5))
Attēls ar mainītiem asu apzīmējumiem

7.15 attēls. Attēls ar mainītiem asu apzīmējumiem

7.2.4 Asu līnijas

Pēc noklusējuma vairākām tēmām nerādās asu līnijas. Tās var pievienot ar argumentu axis.line =, vai axis.line.x = un axis.line.y =. Tā kā tās ir līnijas, tad to izskata maiņai izmanto funkciju element_line() (7.16 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(axis.line = element_line(linetype = "longdash"))
Attēls ar asu līnijām

7.16 attēls. Attēls ar asu līnijām

Asu līniju galos ir iespējams arī pievienot bultiņu ar argumentu arrow = un funkciju arrow(), kurā norāda argumentu length = un bultiņas garumu un mērvienību (funkcijā unit()) (7.17 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(axis.line = element_line(arrow = arrow(length = unit(2, 'mm'))))
Attēls ar bultiņām pie asīm

7.17 attēls. Attēls ar bultiņām pie asīm

7.2.5 Leģendas novietojums

Leģendas novietojuma nosaka ar argumentu legend.position = un iespējamām vērtībām "none", "left", "right", "bottom" un "top" (7.18 attēls).

ggplot(CO2, aes(conc,uptake, color = Type)) + geom_point() + 
      theme(legend.position = "bottom")
Attēls ar leģendu apakšā

7.18 attēls. Attēls ar leģendu apakšā

Ja nepieciešams novietot leģendu attēla iekšienē, tad jānorāda relatīvās x un y koordinātes, kur c(0,0) atbilst attēla apakšējam kreisajam stūrim un c(1,1) attēla augšējam labajam stūrim (7.19 attēls).

ggplot(CO2,aes(conc, uptake, color = Type)) + geom_point() + 
      theme(legend.position = c(0.1,0.8))
## Warning: A numeric `legend.position` argument in `theme()` was deprecated in ggplot2
## 3.5.0.
## ℹ Please use the `legend.position.inside` argument of `theme()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Attēls ar leģendu attēla iekšienē

7.19 attēls. Attēls ar leģendu attēla iekšienē

Leģendas novietojumā var mainīt arī leģendas ierakstu izvietojumu horizontāli vai vertikāli ar argumentu legend.direction = (7.20 attēls)

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(legend.position = "bottom",
            legend.direction = "vertical")
Attēls ar leģendu apakšā un leģendas ierakstiem izkārtotiem vertikāli

7.20 attēls. Attēls ar leģendu apakšā un leģendas ierakstiem izkārtotiem vertikāli

Leģendas novietojumu var ietekmēt arī mainot atstarpi starp leģendu un pamatattēlu ar argumentu legend.box.spacing = un funkciju unit(), kurā norāda vēlamo atstarpes izmēru un mērvienību (7.21 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(legend.box.spacing = unit(1, "cm"))
Attēls ar tālāk novietotu leģendu

7.21 attēls. Attēls ar tālāk novietotu leģendu

7.2.6 Leģendas virsraksts

Leģendas virsrakstam var mainīt izskatu (legend.title =) līdzīgi kā citiem teksta elementiem, kā arī mainīt leģendas virsraksta novietojumu (legend.title.align =) ar vērtībām no 0 (pa kreisi) līdz 1 (pa labi) (7.22 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(legend.title = element_text(size = 15,
                                        color = "darkgreen",
                                        face = "bold.italic"),
            legend.title.align = 1)
## Warning: The `legend.title.align` argument of `theme()` is deprecated as of ggplot2
## 3.5.0.
## ℹ Please use theme(legend.title = element_text(hjust)) instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Attēls ar mainītu leģendas virsrakstu

7.22 attēls. Attēls ar mainītu leģendas virsrakstu

7.2.7 Leģendas pamatne

Kopējo leģendas pamatnes izskatu var mainīt ar argumenu legend.background = un funkciju element_rect() (7.23 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(legend.background = element_rect(fill = "grey73",
                                                 colour = "black"))
Attēls ar mainītu leģendas pamatni

7.23 attēls. Attēls ar mainītu leģendas pamatni

Ja attēlam ir divas vai vairākas leģendas, tad legend.background = maina katras atsevišķas leģendas pamatni, bet kopējo pamatni maina ar argumentu legend.box.background = (7.24 attēls).

ggplot(CO2, aes(conc, uptake, color = Type, shape = Treatment)) + geom_point() + 
      theme(legend.box.background = element_rect(fill = "grey73",
                                                 colour = "black"),
            legend.background = element_rect(fill = "grey90"))
Attēls ar mainītu abu leģendu pamatni

7.24 attēls. Attēls ar mainītu abu leģendu pamatni

7.2.8 Leģendas teksti

Leģendas ierakstu tekstus maina ar argumentiem legend.text = (to izskats) un legend.text.align = (to novietojums pa kreisi (0) vai labi (1)) (7.25 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(legend.text = element_text(size = 7,
                                       angle = 5),
            legend.text.align = 0.8)
## Warning: The `legend.text.align` argument of `theme()` is deprecated as of ggplot2
## 3.5.0.
## ℹ Please use theme(legend.text = element_text(hjust)) instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Attēls ar mainītu leģendu tekstu

7.25 attēls. Attēls ar mainītu leģendu tekstu

7.2.9 Leģendas ieraksti

Pašu leģendas ierakstu, kuros parādās, piemēram, krāsu līmeņi vai simbolu veidi, mainīšanai ir pieejams parametrs legend.key =, kas maina ieraksta pamatnes izskatu (7.26 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(legend.key = element_rect(fill = "lightblue",
                                      color = "blue"))
Attēls ar mainītu leģendu ieraksta pamatni

7.26 attēls. Attēls ar mainītu leģendu ieraksta pamatni

Leģendas ierakstu pamatnes izmēru maiņai izmanto argumentu legend.key.size =, kas uzreiz maina vienādā apjomā gan platumu, gan augstumu, vai arī parametrus legend.key.height = un legend.key.width =, kas attiecīgi maina tikai augstumu, vai tikai platumu. Visiem šiem argumentiem ir jāizmanto funkcija unit(), lai noteiktu šo izmēru (7.27 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(legend.key.height = unit(0.5, "cm"),
            legend.key.width = unit(1, "cm"))
Attēls ar mainītu leģendu ierakstu izmēru

7.27 attēls. Attēls ar mainītu leģendu ierakstu izmēru

7.2.10 Attēla iekšējās daļas pamatne

Attēla iekšējās daļas pamatnes izskata maina ar argumentu panel.background =. Ja šo argumentu lieto kopā ar funkciju element_blank(), tad tiek noņemta pamatne, tai skaitā, arī krāsa (aizpildījums) (7.28 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(panel.background = element_blank())
Attēls ar noņemta iekšējās daļas pamatni

7.28 attēls. Attēls ar noņemta iekšējās daļas pamatni

Lai noņemtu tikai krāsu, arguments fill = jānorāda kā NA. Ja papildus norāda argumenu color =, tad apkārt attēla iekšējai daļai parādās līnija (7.29 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(panel.background = element_rect(fill = NA, color = "black"))
Attēls ar līniju apkārt iekšējai daļai

7.29 attēls. Attēls ar līniju apkārt iekšējai daļai

7.2.11 Palīglīnijas (gridlines)

Visu palīglīniju ietekmēšanai jāizmanto arguments panel.grid =, piemēram, tā vērtību norādot kā element_blank() tiks noņemtas visas palīglīnijas (7.30 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(panel.grid = element_blank())
Attēls bez palīglīnijām

7.30 attēls. Attēls bez palīglīnijām

Ir iespējams arī ietekmēt atsevišķi visas galvenās palīglīnijas un mazās palīglīnijas, attiecīgi ar argumentiem panel.grid.major = un panel.grid.minor =. Var ietekmē arī atsevišķi šīs palīglīnijas attiecībā pret x un y ass ar argumentiem kā panel.grid.major.x = (7.31 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(panel.grid.major.x = element_line(colour = "lightblue"),
            panel.grid.major.y = element_line(linetype = "dashed",
                                              linewidth = 2))
Attēls ar izmainītām palīglīnijām

7.31 attēls. Attēls ar izmainītām palīglīnijām

7.2.12 Attēla daļu virsraksti

Tiem attēliem, kas ir sadalīti daļās izmantojot facet_...() funkcijas, atsevišķu attēlu nosaukumu tekstu pamatnes maina ar elementu strip.background =, bet pašu tekstu izskatu ar strip.text = (visus kopā), vai arī ar argumentiem strip.text.x = (horizontālie nosaukumi) un strip.text.y = (vertikālie nosaukumi) (7.32 attēls).

ggplot(CO2, aes(conc, uptake)) + geom_point() + 
      facet_grid(Treatment ~ Type) +
      theme(strip.background = element_rect(colour = "black", fill = NA),
            strip.text.x = element_text(face = "italic"),
            strip.text.y = element_text(face = "bold"))
Sadalīts attēls ar mainītiem nosaukumu noformējumiem

7.32 attēls. Sadalīts attēls ar mainītiem nosaukumu noformējumiem

7.2.13 Visa attēla pamatne

Visa kopējā attēla pamatnes (fona) noteikšanai izmanto argumentu plot.background = (7.33 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(plot.background = element_rect(fill = "lightgreen"))
Attēls ar mainītu pamatnes krāsu

7.33 attēls. Attēls ar mainītu pamatnes krāsu

Visam attēlam var mainīt arī malas izmērus, kas atrodas apkārt. To nosaka ar argumentu plot.margin = un funkcijā unit() norādot četrus skaitļus, kas atbilst attiecīgi augšejai, labajai, apakšējai un kreisajai malai (7.34 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() + 
      theme(plot.margin = unit(c(2, 2, 3, 3), "cm"))
Attēls ar mainītiem malas izmēriem

7.34 attēls. Attēls ar mainītiem malas izmēriem

7.3 Noformējuma saglabāšana kā objektu

Attēla noformējuma nosacījumus nav obligāti jāpievieno attēlam kā atsevišķas funkcijas theme(), bet visus nepieciešamos elementus var norādīt vienās theme() iekavās (7.35 attēls).

ggplot(CO2, aes(conc, uptake, color = Type)) + geom_point() +
  theme(axis.text = element_text(size = 12, color = "darkgreen"),
        axis.title = element_text(size = 15, color = "darkblue", face = "italic"),
        panel.background = element_rect(fill = NA),
        axis.line = element_line(color = "black"),
        legend.position = "top")
Attēls, kuram mainīti vairāki attēla elementi

7.35 attēls. Attēls, kuram mainīti vairāki attēla elementi

Noformējumu ir iespējams arī definēt kā atsevišķu objektu, kuru tad var izmantot atkāroti, lai vairākiem attēliem iegūtu identisku noformējumu (7.36 attēls).

tema <- theme(axis.text = element_text(size = 12, color = "darkgreen"),
              axis.title = element_text(size = 15, color = "darkblue", face = "italic"),
              panel.background = element_rect(fill = NA),
              axis.line = element_line(color = "black"),
              legend.position = "top")
ggplot(CO2, aes(uptake, fill = Treatment)) + geom_histogram(binwidth = 5) +
  tema
Attēls, kuram mainīti vairāki attēla elementi

7.36 attēls. Attēls, kuram mainīti vairāki attēla elementi