17.8 Vzhled obrázků
Vzhled obrázků, nebo přesněji prvky, které nemají vztah k datům se v ggplot2 ovládají pomocí funkce theme()
. Ta umožňuje změnit vzhled obrázků k nepoznání: můžete mít obrázek, který vypadá, jako by byl vytvořen v Excelu, Stata, nebo jako by vyšel v The Economist.
Funkce theme()
má obrovské množství parametrů a nebylo by praktické je nastavovat vždy u každého obrázku. Proto v ggplot2 existuje řada předpřipravených kompletních témat (vzhledů). Například theme_bw()
, theme_classic()
nebo theme_void()
. Základní vzhled obrázků potom odpovídá theme_gray()
. Nápověda ggplot2 obsahuje hrubá doporučení, kdy je vhodné použít které téma.
17.8.1 Ukázky předpřipravených témat
Pro ukázky použijeme již známý sloupcový graf:
%>%
occupation ggplot(
aes(x = occupation, fill = sex)
+
) geom_bar() -> p
Populární téma je theme_bw()
, které ggplot2 doporučuje například pro prezentace:
+ theme_bw() p
Klasicky vypadající téma s minimem čar je theme_classic()
:
+ theme_classic() p
Například pro kreslení map oceníte velmi speciální téma theme_void()
, které zahodí všechny čáry:
+ theme_void() p
Sbírku předpřipravených témat obsahuje například balík ggthemes. Kromě různých theme_*()
obsahuje balík i řadu scale_*_*()
a několik geom_*()
funkcí.
Například minimalistické téma vytvořené podle Tufteho doporučení obsahuje ggthemes::theme_tufte()
:
+ ggthemes::theme_tufte() p
17.8.2 Modifikace témat
ggplot2 umožňuje vytvářet vlastní předpřipravená témata, ale většinou bohatě postačuje použít předpřipravené a upravit ho, to lze zařídit následujícím způsobem:
+
p theme_classic() +
theme(
panel.grid.major = element_line(size = 0.2)
)
U theme()
funguje vrstvení stejně, jako u všeho ostatního. Volání jednotlivých funkcí modifikuje podkladovou datovou strukturu. Zavolání funkce theme_classic()
tedy nastaví všechny parametry tak, jak to odpovídá theme_classic
– to znamená, žádné linky na pozadí. Následné volání theme()
přepíše to, co před tím nastavilo volání theme_classic()
a linky přidá. Žádný další parametr nebyl v theme()
zadán a proto se nic jiného nezmění.
Pokud by funkce byly volány v opačném pořadí, potom by byl výsledek následující:
+
p theme(
panel.grid.major = element_line(size = 0.2)
+
) theme_classic()
Výsledek by přesně odpovídal theme_classic
. theme_classic()
totiž bez milosti přepíše veškeré formátování vytvořené v předchozích voláních theme()
nebo theme_*()
.
Samotné volání theme()
ve výše uvedeném příkladu vypadá skutečně velmi krypticky, ale není to tak, protože, podobně jako (skoro) ve všem v ggplot2
, za ním stojí promyšlený systém.
Funkce theme()
má opravdu mnoho parametrů (viz ?theme
), jejich jména odpovídají jménům jednotlivých grafických prvků. Jména jsou naštěstí často velmi výstižná, intuitivní, a navíc je RStudio zvládá (u novějších verzí ggplot2) našeptávat.
Formátování grafických prvků se ve většině případů provádí pomocí volání jedné z následujících funkcí:
element_text(family = NULL, face = NULL, colour = NULL, size = NULL,
hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL,
color = NULL, margin = NULL, debug = NULL)
element_line(colour = NULL, size = NULL, linetype = NULL,
lineend = NULL, color = NULL)
element_rect(fill = NULL, colour = NULL, size = NULL, linetype = NULL,
color = NULL)
element_blank()
Tu správnou lze uhodnout. Pokud chcete upravit formátování prvku, který je ve své podstatě text, potom chcete použít element_text()
. Příkladem může být modifikace titulku (plot.title
) obrázku:
+
p labs(
title = "Just Another Bar Plot"
+
) theme(
plot.title = element_text(colour = "red")
)
Pokud je prvek svým charakterem čára, potom se jeho formátování nastavuje pomocí element_line()
(viz modifikace čar na pozadí výše). Prvky, které jsou ve své podstatě čtyřúhelník se potom modifikují pomocí element_rect()
. Příkladem může být změna barvy pozadí grafu na poníkovou:
+
p theme(
panel.background = element_rect(fill = "pink")
)
Speciální funkce je potom element_blank()
, která způsobí, že se daný prvek z obrázku kompletně vypustí:
+
p theme(
legend.title = element_blank()
)
Například toto volání vypustilo jméno legendy a to zcela. Špinavé triky typu scale_fill_discrete(name = "")
sice způsobí, že jméno “nebude vidět.” Respektive se vykreslí prázdný řetězec. Místo pro titulek však bude alokováno a bude tak rozhazovat uspořádání obrázku. element_blank()
je správná cesta.
Některé parametry v theme()
se nastavují pomocí speciálních funkcí – typicky jde o nastavení velikostí pomocí funkce unit()
. Další parametry se nastavují prostým zadáním hodnoty. Příkladem může být pozice a orientace legendy:
+
p theme(
legend.position = "bottom",
legend.direction = "horizontal"
)