Kromě balíčku tidyverse, jehož součástní je i balíček
ggplot2
, určený k tvorbě grafů, budeme používat také
balíček Cairo. Pokud jej nemáte nainstalovaný, udělejte to např. pomocí
install.packages("Cairo")
library(tidyverse)
K procvičování tvorby použijeme stará dat z Cest do dospělosti, se
kterými jste se možná setkali ve Statistice II. Vytvoříme si i menší
dataset df_sml
, obsahující 100 náhodně vybraných
případů.
set.seed(22)
<- haven::read_sav("data/eukids.sav") %>%
df mutate(across(c(pohlavi, kohorta, narod, ocek_vzd), as_factor)) %>%
drop_na(pohlavi, kohorta)
<- sample_n(df, 100) df_sml
Jedním z nesnandnějších způsobů, jak v R vytvářet grafy, je balíček ggplot2. Jeho filozofie je taková, že dělí graf na tři základní části:
graf = použitá data + estetické mapování + geometrický tvar
Hlavní funkce balíčku se jmenuje podobně jako samotný balíček, a to ggplot. Obecně grafy vytváříme tímto kódem:
ggplot(data = POUŽITÝ_DATASET) +
GEOM_FUNKCE(mapping = aes(<MAPOVÁNÍ PROMĚNNÝCH>))
Pro ukázku SI vytvoříme bodový graf (scatter plot) depresivity
(deprese
) a psychosomatických požítí
(zdravi
).
ggplot(data = df_sml) +
geom_point(aes(x = deprese, y = zdravi))
Jak můžeme vidět, prvním argumentem samotné funkce
ggplot()
je použitý dataset. pak následuje výraz
+
a volba “geometrické” funkce k tvorbě grafu (těch je více
a budeme si je postupně ukazovat). Pro tvorbu bodového grafu použijeme
geom_point()
. Nakonec v samotné funkci
geom_point()
upřesními uvnitř funkce aes()
,
jaké proměnné se mají mapovat na jakou osu/škálu grafu. Jména proměnných
přitom specifikujeme bez uvozovek. Kdybychom chtěli specifikovat jména
proměnných v uvozovkách jako “strings”, musíme použít funkci
aes_string()
.
ggplot(data = df_sml) +
geom_point(aes_string(x = "deprese", y = "zdravi"))
Funkce geom_point má více argumentů, např. size
, kterým
specifikujeme velikost bodů, nebo shape
, kterým
specifikujeme tvar bodů:
ggplot(data = df_sml) +
geom_point(aes(x = deprese, y = zdravi), size = 3, shape = 18)
selfe
) a
depresivity (deprese
).zn_mat
) a češtiny (zn_cj
). Proč není takový
scatterplot moc užitečný?zn_mat
a
zn_cj
jiné geomy: geom_jitter()
nebo
geom_count()
. Zkuste obojí.Informace obsažené v datech můžeme v grafu vyjádřit různým způsobem:
hodnoty či úrovně proměnných “mapujeme” na různé “škály”. Například při
tvorbě bodového grafuje mapujeme dvě proměnné (níže v grafu depresivitu
a psychosomatické symptomy) na prostorové osy X a Y. Ale můžeme zachytit
i další informace o jednotlivých “případech”, např. pohlaví respondentů
pomocí diskrétní barevné škály, a to argumentem color
v
rámci funkce aes()
.
ggplot(data = df_sml) +
geom_point(mapping = aes(x = deprese, y = zdravi, color = pohlavi))
Podobně bychom mohli mapovat informace o pohlaví nebo jiné proměnné na škálu velikosti čili vyjádřit úroveň proměnné pomocí velikosti bodů v grafu.
ggplot(data = df_sml) +
geom_point(mapping = aes(x = deprese, y = zdravi, size = pohlavi))
Tady je ale důležité upozornit na to, že mapovat vyjádřit úrovně nominální proměnné, nemající přirozené pořadí, pomocí velikost není dobrá praxe, ale jde to, když si o to řekneme.
Dále bychom mohli vyjádřit pohlaví pomocí míry průhlednosti (argument
alpha
) nebo tvaru bodů argument (shape
).
ggplot(data = df_sml) +
geom_point(mapping = aes(x = deprese, y = zdravi, alpha = pohlavi),
size = 3)
ggplot(data = df_sml) +
geom_point(mapping = aes(x = deprese, y = zdravi, shape = pohlavi),
size = 3)
Estetické vlastnosti geomů rovněž můžeme nastavit ručně. Kdybychom např.
chtěli, ať jsou všechny body v grafu modře a jsou větší, můžeme
argumenty color
a size
použít mimo funkci
aes()
a přímo specifikovat konkrétní barvu a velikost.
ggplot(data = df_sml) +
geom_point(mapping = aes(x = deprese, y = zdravi),
color = "blue", size = 3)
V takovém případě pak barva ani velikost nenese informace o nějaké proměnné, ale pouze jsme změnili vzhled všech bodů v grafu.
color
) můžeme použít její název v podobě textu v závorkách
(string). Zde je
přehled všech barev v R, které mají vlastní název a je možné se na
ně takto odkázat. Názvy všech 657 barev si můžeme také získat pomocí
funkce colors()
.size
.alpha
.shape
, např. uvedením čísla (viz níže).<- tibble(
shapes_df id = 0:25, # čísla
x = rep(1:13, 2),
y = rep(1:2, each = 13)
)
# Přehled tvarů
ggplot(shapes_df, aes(x, factor(y), shape = factor(id))) +
geom_point(size = 5, fill = "red") +
scale_shape_manual(values = 0:25) +
geom_text(aes(label = id), nudge_y = 0.1) +
theme_void() +
theme(legend.position = "none")
Některé tvary vypadají podobně, ale u těch, které jsou červené, lze
nastavit samostatně barvu obrysu (color
) a barvu výplně
(fill
).
linetype
. Typ čary pak stanovujeme pomocí čísla od 0 do 6
(např. linetype = 3
) nebo textu (např.
linetype = "dotted"
). Níže v grafu je přehled různých typů
čar.<- tibble(
linetype_df y = rep(0:6, each = 2) %>% factor(),
x = rep(1:2, times = 7),
nms = c("blank", "solid", "dashed", "dotted",
"dotdash", "longdash", "twodash") %>% rep(each = 2)
)
%>%
linetype_df ggplot(aes(x, y, group = y, linetype = y)) +
geom_line(size = 2) +
scale_linetype_manual(values = 0:7) +
theme_void() +
theme(legend.position = "none") +
geom_text(aes(label = if_else(x == 1, y, NULL)), nudge_x = -0.1)+
geom_text(aes(label = if_else(x == 2, nms, NULL)), nudge_x = 0.1)
V kódu níže je chyba. Body nejsou vybarveny modře. Opravte ji, aby byly.
ggplot(data = df_sml) +
geom_point(mapping = aes(x = deprese, y = zdravi, color = "blue"))
Vytvořte graf deprese
(na ose X) a zdravi
s
využitím menšího datasetu df_sml
. Pak postupně “mapujte”
pohlaví
na barvu, velikost a tvar. Pak totéž zkuste udělat
pro proměnnou ziv_sp
(také ji mapovat na barvu, velikost a
tvar). Pohlaví je kategorická proměnná a životní spokojenost spíš
spojitá. Jak se tyto různé estestické provky chovají jinak pro
kategorická a spojité proměnné?
Co se stane, když mapujeme tutéž proměnnou na různé estitické prvky?
ggplot(data = df_sml) +
geom_point(mapping = aes(x = deprese, y = zdravi, color = ziv_sp, size = ziv_sp))
Co se stane, když při mapování nepoužijeme přímo jméno nějaké proměnné,
ale např. ziv_sp < 2.5
.
ggplot(data = df_sml) +
geom_point(mapping = aes(x = deprese, y = zdravi, color = ziv_sp < 2.5))
Ukázali jsme si, že jedním ze způsobů, jak vyjádřit úrovně
proměnných, je pomocí estetických vlastností grafu. Další ze způsobů,
který se hodí zejména pro kategorické proměnné, je rozdělit graf na
fazety, což jsou vlastně samostatné grafy pro různé subsety dat. K tomu
můžeme použít funkci facet_wrap
, a následujícím způsobem,
kdybycho chtěli samostatné grafy v závislosti na proměnné
kohorta
# Základní graf si uložíme do objektu p
<- ggplot(data = df_sml) +
p geom_point(mapping = aes(x = deprese, y = zdravi))
p
+ facet_wrap(~kohorta, nrow = 2) # dva řádky p
+ facet_wrap(~kohorta, ncol = 2) # dva sloupce p
Mohli bychom chtít graf rozdělit i podle úrovní dvou proměnných, např. kohorty i pohlaví, což bychom provedli takto:
+ facet_wrap(~kohorta + pohlavi, nrow = 2) p
Kromě toho má balíček ggplot2
i funkci
facet_grid()
, která se hodí tehdy, když chceme graf
rozdělit na řádky podle úrovní jedné proměnné a na sloupce podle úrovní
druhé proměnné.
+ facet_grid(kohorta ~ pohlavi) # řádky ~ sloupce p
+ facet_grid(pohlavi ~ kohorta) # řádky ~ sloupce p
Co se stane, pokud jako fazetu zvolíme spojitou proměnnou nebo
jednoduše proměnnou s mnoha úrovněmi. Zkuste to udělat pro proměnnou
optim
(optimismus)
Proč jsou v tomto grafu některé fazety prázdné?
ggplot(data = df_sml) +
geom_point(mapping = aes(x = deprese, y = zdravi)) +
facet_grid(zn_mat ~ zn_cj)
Souvisí to nějak s tímto grafem?
ggplot(data = df_sml) +
geom_count(mapping = aes(x = zn_mat, y = zn_cj))
Geom je geometrický objekt, který slouží v grafu k reprezentaci dat. Často se různé typy grafů nazývají podle toho, jaké geomy používají. Sloupcové grafy např. používají sloupce, bodové grafy body, spojnicové grafy úsečky, boxploty “krabice” apod. Můžeme si ukázat, jak lze data a vztahy reprezentovat pomocí různých geomů.
# Pomocí bodů, s využitím geom_point()
ggplot(data = df_sml) +
geom_point(mapping = aes(x = selfe, y = deprese))
# Pomocí křivky, s využitím geom_smooth()
ggplot(data = df_sml) +
geom_smooth(mapping = aes(x = selfe, y = deprese))
Každá geometrická funkce (geom function) v ggplot()
vyžaduje specifikaci estetického mapování, tj. toho, prostřednictvím
čeho mý být vajádřena která proměnná. Každý geom má ale omezený počet
estetických vlastností, na které lze proměnnou mapovat, můžeme např.
nastavit “tvar” (shape
) bodů (point
), ale
nikoli “tvar” křivek. U křivek ale můžeme naopak nastavit typ čar
(linetype
), zatímco u bodů nikoli.
Zachyťte vztah mezi sebehodnocením (selfe
) a
depresivitou (deprese
) pomocí dvou typů grafů/geomů:
geom_point()
a geom_smooth()
. Pro každý z
těchto typů grafů mapujte pohlaví (pohlavi
) postupně na
shape
, linetype
, group
a
color
? Na které estetické parametry jde pohlaví mapovat (a
na které nikoli) v závislosti na typu geomu (protože daný geom tyto
estetické parametry nemá).
V jednom grafu můžeme zobrazit více geomů. Stačí použít více funkcí
typu geom_
, např. takto bychom vyjádřili vztah mezi
sebehodnocením a depresivitou jak pomocí bodů, tak křivky:
ggplot(data = df_sml) +
geom_point(mapping = aes(x = selfe, y = deprese)) +
geom_smooth(mapping = aes(x = selfe, y = deprese))
To ale vede ke zbytečné duplicitě. Proto lze mapování proměnných na
grafické parametry grafu nastavit přímo ve funkci ggplot()
,
Pokud tak učiníme, všechny použité geom_
funkce toto
nastavení převezmou (pokud jej nepřepíšeme). Tyto dva příkazy tedy vedou
k totožným grafům, ale v druhém z nich jsme se zbavili duplicity v
kódu:
ggplot(data = df_sml) +
geom_point(mapping = aes(x = selfe, y = deprese)) +
geom_smooth(mapping = aes(x = selfe, y = deprese))
ggplot(data = df_sml, mapping = aes(x = selfe, y = deprese)) +
geom_point() +
geom_smooth()
Pokud mapování nastavíme v jedné funkci geom_
, ale v
ostatních nikoli, ovlivní to grafické parametry pouze jednoho geomu.
Můžeme si vyzkoušet, jak bude graf vypadat, pokud pohlaví mapujeme na
barvu jen v rámci geom_point
a pak jen v rámci
geom_smooth
:
ggplot(data = df_sml, mapping = aes(x = selfe, y = deprese)) +
geom_point(mapping = aes(color = pohlavi)) + # mapovat pohlaví na barvu jen pro body
geom_smooth()
ggplot(data = df_sml, mapping = aes(x = selfe, y = deprese)) +
geom_point() +
geom_smooth(mapping = aes(color = pohlavi)) # mapovat pohlaví na barvu jen pro křivku
Zkuste odhadnout, jaký graf získáme, když spustíme následující kód.
Pro informaci: obě proměnné, monitorování (motiv
) i důvěra
vůči rodičům (duv_r
), jsou spojité.
ggplot(data = df_sml, mapping = aes(x = monit, y = duv_r)) +
geom_point() +
geom_smooth()
Co se stane, když nastavíme argument show.legend = FALSE
?
Co se stane, když jej odstraníme nebo nastavíme na TRUE
?
Vyzkoušejte si to.
ggplot(data = df_sml, mapping = aes(x = selfe, y = deprese)) +
geom_point() +
geom_smooth(mapping = aes(color = pohlavi),
show.legend = FALSE)
K čemu slouží argument se
ve funkci
geom_smooth()
? Vyzkoušejte.
ggplot(data = df_sml, mapping = aes(x = selfe, y = deprese)) +
geom_point() +
geom_smooth(se = FALSE)
ggplot(data = df_sml, mapping = aes(x = selfe, y = deprese)) +
geom_point() +
geom_smooth(se = TRUE)
Pracujte s kompletním datasetem df
a po krocích
vytvářejte jednotlivé grafy, abyste hned zachytili, kdyby se něco
“pokazilo”, viděli, jak se graf postupně mění, když rozšiřujeme kód.
selfe
a optim
pomocí
geom_jitter()kohorta
a pohlavi
monit
pomocí geom_boxplot()kohorta
a na osu Y
monit
geom_boxplot()
nastavte argument
notch = TRUE
+ coord_flip()
facet_wrap()
rozdělte graf na dva řádky podle
kohortygeom_point(stat = "summary", fun = mean)
geom_line(stat = "summary", fun = mean, aes(group = pohlavi))
geom_errorbar(stat = "summary", fun.data = mean_cl_normal)
geom_errorbar()
si pohrajte s argumentem
width
– zkuste jej nastavit na různé hodnoty, např. 1, 0.5
nebo 0.1.dodge <- position_dodge(width = 0.1)
a do všech funkcí
geom_
přidejte argument position = dodge
.Pokud vytváříme pouze explorační grafy pro vlastní potřebu, nemusíme
si s popisky příliš lámat hlravu. Ale pokud grafy budeme někde
prezentovat, měli bychom vhodné popisky určitě nastavit. Přidat je
můžeme pomocí funkce labs()
. Například titulek grafu lze
nastavit takto, pomocí argumentu title
v rámci
labs()
.
ggplot(df_sml, aes(selfe, deprese, color = pohlavi)) +
geom_point() +
geom_smooth(se = FALSE, method = lm) +
labs(title = "Depresivita klesá s rostoucím sebehodnocením")
Pomocí argumentu subtitle
také můžeme přidat podtitulek,
který bude uveden menším písmem pod samotným titulkem, a pomocí
argumentu caption
můžeme přidat poznámku, kerá bude
umístěna vpravo dole.
ggplot(df_sml, aes(selfe, deprese, color = pohlavi)) +
geom_point() +
geom_smooth(se = FALSE, method = lm) +
labs(
title = "Depresivita klesá s rostoucím sebehodnocením",
subtitle = "Tento vztah je silnější u dívek",
caption = "Data z projektu Cesty do dospělosti"
)
Dále můžeme pomocí labs()
změnit popisky osy X i Y anebo
jiných škál, zde např. barvy, která vyjadřuje pohlaví žáka.
ggplot(df_sml, aes(selfe, deprese)) +
geom_point(aes(color = pohlavi)) +
geom_smooth(se = FALSE, method = lm) +
labs(
x = "Sebehodnocení (RSES)",
y = "Depresivita (ADS)",
color = "Pohlaví žáka"
)
Vytvořte jakýkoli graf, který chcete, a nastavte pomocí
labs()
všechny popisky, které dovedede změnit.
Další možností, jak vylepšit graf, je upravení podoby škál. Škály
určují, jakým způsobem budou data zobrazeny. Defaultní chování balíčku
ggplot2
je takové, že automaticky určí vhodný typ škály a
sám je přidá. Když například vytvoříme scatterplot tímto kódem:
ggplot(df_sml, aes(selfe, deprese)) +
geom_point()
automaticky rozpozná, že proměnné mapované na osu X a Y
(selfe
a deprese
) jsou spojité spojité
proměnné, zatímco pohlaví je kategorická, takže přidá vhodné škály, aniž
bychom je museli takto ručně definovat:
ggplot(df_sml, aes(selfe, deprese)) +
geom_point(aes(colour = pohlavi)) +
scale_x_continuous() +
scale_y_continuous() +
scale_colour_discrete()
Funkce pro výběr škál vždy začínají slovem “scale_”, pak následuje název estetického prvku (nap.ř x, y, color, fill, alpha, linetype, shape apod.) a na konec typ škály:
continuous
,discrete
,datetime
,date
.První, co můžeme na škále změnit, je vzhled osových značek (ticks) a
popisků hodnot na osách. Pomocí argumentu breaks
kontrolujeme, kde mají být umístěny osové značky, a pomocí argumentu
labels
měníme popisky hodnot na škálách.
Dejte tomu, že nám nevyhovuje defaultní podoba grafu, a chtěli
bychom, aby osové značky na ose X byly vždy ob jednu hodnotu. S využitím
funkce seq()
můžeme breaks
přepsat takto:
# Funkce seq vytváří sekvenci čísel od – do s určeným přírůstkem (by)
seq(8, 26, by = 2)
#> [1] 8 10 12 14 16 18 20 22 24 26
# Defaultní graf
ggplot(df_sml, aes(optim, zdravi)) +
geom_point()
# Změna osových značek osy X a Y
ggplot(df_sml, aes(optim, zdravi)) +
geom_point() +
scale_x_continuous(breaks = seq(8, 26, by = 2)) +
scale_y_continuous(breaks = seq(15, 35, by = 2.5))
Změna popisků hodnot využijeme spíš pro diskrétní škály, například pokud
bychom pohlaví mapovali na diskrétní škálu barvy a chtěli změnit popisky
kategorií, můžeme to udělat následovně. Samotný popis škály jde kromě
funkce labs()
změnit i ve funkci v rámci funkce
scale_
, a to pomocí argumentu name
.
# Defaultní graf
ggplot(df_sml, aes(optim, zdravi, color = pohlavi)) +
geom_point()
# Změna popisků úrovní pro proměnnou mapovanou na diskrétní barevnou škálu
ggplot(df_sml, aes(optim, zdravi, color = pohlavi)) +
geom_point() +
scale_color_discrete(name = "Pohlaví",
labels = c("Chlapci", "Dívky", "Neuvedeno"))
Není také problém změnit, jakými barvami mají být jednotlivé úrovně
nějaké diskrétní proměnné reprezentovány. Na výběr máme nejen z předem
definovaných názvů barev, ale můžeme barvy specifikovat pomocí
hexadecimálních kódů, což jsou šestimístné kódy používající
šestnáctkovou soustavu k určení poměru červené, zelené a modré. Musíme
ale místo scale_color_discrete()
použít
scale_color_manual
a pak barvy specifikovat pomocí
argumentu values jako textový vektor (který musí mít alespoň tolik
prvků, kolik má daná proměnná úrovní).
ggplot(df_sml, aes(optim, zdravi, color = pohlavi)) +
geom_point() +
scale_color_manual(name = "Pohlaví",
labels = c("Chlapci", "Dívky", "Neuvedeno"),
values = c("#FF0000", # červená
"#00FF00", # zelená
"#0000FF")) # modrná
Zkuste navštívit https://colorhunt.co/ a pozměnit barevnou paletu grafu výše. Vyberte si barvy, které se vám líbí.
Jak si dále můžete všimnout, vzhled legendy odpovídá nastavení grafu,
např. body v legendě mají stejnou barvu a velikost. Pro lepší čitelnost
legendy ale můžeme toto nastavení přepsat pomocí
guide = guide_legend(override.aes = list())
. Kdybychom
například chtěli, aby body v legendě byly větší než v samotném grafu,
můžeme to udělat takto:
ggplot(df_sml, aes(optim, zdravi, color = pohlavi)) +
geom_point() +
scale_color_manual(name = "Pohlaví",
labels = c("Chlapci", "Dívky", "Neuvedeno"),
values = c("#FF0000", # červená
"#00FF00", # zelená
"#0000FF"),
guide = guide_legend(override.aes = list(size = 5)))
Design nedatových prvků grafu můžeme měnit pomocí
funkce()
. ggplot2 obsahuje i několik kompletních
grafických schémat, které můžeme na graf aplikovat takto:
# Defaultní graf
<- ggplot(df_sml, aes(deprese, zdravi)) +
p geom_point(aes(color = pohlavi)) +
geom_smooth(se = FALSE)
p
# Různá grafická schémata
+ theme_bw() p
+ theme_classic() p
+ theme_dark() p
+ theme_grey() # Default p
+ theme_light() p
+ theme_linedraw() p
+ theme_minimal() p
+ theme_void() p
Pokuc bychom nechtěli používat tato předdefinovaná schémata, můžeme
použít pomocí funkce theme()
specifikovat nepřeberné
množství různých parametrů. Zkuste se podívat na nápovědu pomocí
?theme()
, kolik možností se nabízí. Zde je jenom na ukázku
změna několika grafických prvků.
# Takto
+
p theme(
text = element_text(size = 14), # Zvětšit veškerý text
axis.title = element_text(face = "bold"), # Názvy os tučně
legend.title = element_text(face = "bold"), # titulek legendy tučně
panel.background = element_blank(), # Odsranit barevné pozadí
axis.line = element_line(colour = "black"), # Přidat černé ohraničení os
legend.key = element_blank(), # Klíč legendy bez barevného pozadí
legend.position = "top", # Umístění legendy nahoru
legend.text = element_text(size = 14) # Klíč legendy větším písmem
)
# Nebo takto, kdy si theme nejprve uložíme do objektu my_theme
# a pak tento objektu můžeme přidávat k jakémukoli grafu
<- theme(
my_theme text = element_text(size = 14), # Zvětšit veškerý text
axis.title = element_text(face = "bold"), # Názvy os tučně
legend.title = element_text(face = "bold"), # titulek legendy tučně
panel.background = element_blank(), # Odsranit barevné pozadí
axis.line = element_line(colour = "black"), # Přidat černé ohraničení os
legend.key = element_blank(), # Klíč legendy bez barevného pozadí
legend.position = "top", # Umístění legendy nahoru
legend.text = element_text(size = 14) # Klíč legendy větším písmem
)
+ my_theme p
Chceme-li použít jedno z komletních grafických schémat (např.
theme_bw()
) pro více grafů nebo pro všechny vytvořené
grafy, nemusíme ke každému grafu přidávat + theme_bw()
.
Jednodušší je použít funkci theme_set()
. Můžeme si původní
theme uložit do objektu s libovolným názvem (např. old
) a
zároveň nastavit, ať se grafické schéma theme_bw()
použije
pro všechny další vytvořené grafy
# Tímto uložíme původní grafické schéma do objektu old a zároveň nastavíme
# pro všechny další grafy schéma theme_bw()
<- theme_set(theme_bw())
old p
Kdyby nás theme_bw()
omrzelo, můžeme vráti původní schéma
jednoduše opět pomocí theme_set()
# Zpátky k původnímu schématu, které jsme si uložili do objektu old
theme_set(old)
p
Můžeme si také nastavit vlastní desing pomocí funkce
theme_update()
. Tím vlastně pozměníme jen vybrané prvky
aktuálního grafického schématu (ostatní zůstanou beze změny). Takto se
vyhneme tomu, abychom např. ke každému grafu přidávali vždy
+ my_theme
# Původní grafické schéma je uloženo do objektu old
# A zároveň updatujeme některé jeho prvky
<- theme_update(
old text = element_text(size = 14), # Zvětšit veškerý text
axis.title = element_text(face = "bold"), # Názvy os tučně
legend.title = element_text(face = "bold"), # titulek legendy tučně
panel.background = element_blank(), # Odsranit barevné pozadí
axis.line = element_line(colour = "black"), # Přidat černé ohraničení os
legend.key = element_blank(), # Klíč legendy bez barevného pozadí
legend.position = "top", # Umístění legendy nahoru
legend.text = element_text(size = 14) # Klíč legendy větším písmem
) # Všechny grafy teď budou mít updatované schéma
p
# pokud nevrátíme původní pomocí theme_set(old)
Často také potřebujeme si graf exportovat. To můžeme prostřednictvím
funkce ggsave()
, která obsahuje tyto hlavní argumenty:
filename
: Cesta + název nově vytvořeného souboru.
Jediný argument, který je nutné specifikovat.plot
: Graf, který chceme uložit. Pokud nespecifikujeme,
uloží se naposledy vytvořený graf.device
: Formát souboru. Doporučuji “png” nebo “tiff”
kvůli bezztrátové kompresi.type
: Použitá grafická knihovna/balíček pro tvorbu
grafu. “cairo” produkuje asi nejkvalitnější grafy.width
a height
: Rozměry grafu.units
: V jakých jednotkách chceme rozměry
specifikovat.ggsave(filename = "plots/sp_deprese_zdravi.png", # Nově vytvořený soubor
plot = p, # Graf, který chceme uložit
dpi = 300, # Rozlišení
device = "png", # Formát
type = "cairo", #
width = 19, # šířka
height = 10, # Výška
units = "cm")
Podívejte se znovu na proměnné v datasetu:
<- df %>%
x select(pohlavi:neshody) %>%
map(attributes) %>%
map_chr("label")
tibble(
name = names(x),
label = x
%>%
) print(n = Inf)
Vybertes si z nich ty, které vás zajímají, a zkuste vytvořit hlavní typy grafů (můžete vždy použít jiné proměnné), především:
Zkuste vždy nastavit barvu (color
) nebo výplň
(fill
) podle nějaké kategorické proměnné (nejvíce se nabízí
pohlaví a kohorta) a graf “vylepšit” do podoby, kdy byste jej považovali
za hodný publikace. Nakonec zkuste všechny grafy uložit pomocí
ggsave()
.