Grafy - ggplot2

Interpretace geodat

Jan Caha

2024-03-18

Balík ggplot2

  • součást tidyverse

  • založen na filozifii tzv. grammar of graphics

  • mapování složek dat k vizuálním složkám grafů

  • grafy jsou principiálně extrémně dlouhými a komplikovanými seznamy, které se teprve při tisku (zobrazení) převádí na grafiku

  • jednotlivé části grafů lze ukládat do proměnných a různě s nimi pracovat

  • extrémně dobře zpracovaná nápovědy + velké množství tutoriálů online

Zdroje a tutoriály

Konstrukční prvky grafu

  • ggplot() - parametry data, mapping, není nutné uvádět zde, lze uvést u příslušné vrstvy (funkce geom_*())

  • funkce aes() (aesthetic) - parametry x a y (není nutné vždy), další dle možné geometrie, informace získáme u jednotlivých funkcí geom_*

  • geom_*() - parametr pro vykreslení dané geometrie, je možné použít jinou specifikaci dat či aesthetic

Ukázka jednoduchý bodový graf

  • scale_x_continuous(), obecně scale_*_*() - názvy tvoří proměnná a pak typ škály

  • coord_trans()

  • labs() - popisky grafu

  • theme() stylování grafu, jednotlivé prvky, proměnným se přiřazují výsledky funkcí

    • funkce element_*() zejména element_text()
  • předpřipravená témata - theme_*()

  • facety - facet_grid()

Ukázka - jednoduchý graf

library(ggplot2)
data(diamonds)

ggplot(diamonds) +
    geom_point((aes(price, carat, color = color, size = clarity))) +
    scale_color_discrete() +
    labs(
        title = "Diamanty", x = "Cena", y = "Karáty",
        color = "Barva", size = "Čistota"
    ) +
    theme_bw() +
    theme(
        axis.title = element_text(size = 16),
        title = element_text(size = 20),
        axis.text = element_text(size = 14)
    )

Ukázka - jednoduchý graf

Ukázka - graf s dílčími grafy

library(ggplot2)
data(diamonds)

ggplot(diamonds) +
    geom_point((aes(price, carat, color = color, size = clarity))) +
    scale_color_discrete() +
    facet_wrap(vars(cut)) +
    labs(
        title = "Diamanty", x = "Cena", y = "Karáty",
        color = "Barva", size = "Čistota"
    ) +
    theme_bw() +
    theme(
        axis.title = element_text(size = 16),
        title = element_text(size = 20),
        axis.text = element_text(size = 14)
    )

Ukázka - graf s dílčími grafy

Duležité informace

  • proměnné specifikované v aes() se musí vázat na data

  • ty samé proměnné lze specifikovat i přimo v geom_*(), ale pak jsou pro celou vrstvu jednotné, např. size

  • duležité proměnné geom_*() jsou stat (co se bude počítat), position (jestli se budou data nějak odsazovat)

  • možnosti funkcí stat_*()

Uložení části grafu do proměnné

library(ggplot2)
data(diamonds)

template <- list(
    labs(
        title = "Diamanty", x = "Cena", y = "Karáty",
        color = "Barva", size = "Čistota"
    ),
    theme_bw(),
    theme(
        axis.title = element_text(size = 16),
        title = element_text(size = 20),
        axis.text = element_text(size = 14)
    )
)

ggplot(diamonds) +
    geom_point((aes(price, carat, color = color, size = clarity))) +
    scale_color_discrete() +
    template

Uložení části grafu do proměnné

Uložení grafu

graf <- ggplot(diamonds) +
    geom_point((aes(price, carat, color = color, size = clarity))) +
    template

ggsave("graf.png", graf, units = "mm", width = 297, height = 210)

Rozšíření ggplot2

  • Galerie rozšíření
  • nejvýznamnější gganimate, ggthemes, ggstatsplot, ggraph, ggforce, ggalt a cowplot

Interaktivní vizualizace

  • zejména balík plotly

  • umí převést značné množství grafů vytvořených v ggplot2 do interaktivní online verze

  • přímo v plotly lze grafy i tvořit, ale přístup je odlišný od ggplot2

Dotazy?