Exemple ilustrative

Noțiunile prezentate în acest capitol, puse cap la cap, permit generarea figurii de la începutul capitolului. Mai jos este prezentat codul folosit pentru generarea figurii (pentru anul 2018):

ggplot(gapminder_2018) +
  # adaugam curba de regresie loess
  geom_smooth(aes(x = gdpPerCap, y = lifeExp), 
              se = FALSE, method = "loess", 
              color = "orange", size = 0.7, alpha = 0.7) + 
  # adaugam puncte fara Romania
  geom_point(data = gapminder_2018 %>% filter(country != "Romania"),
             aes(x = gdpPerCap, y = lifeExp, color = continent, size = pop),
             alpha = 0.5) +
  # adaugam Romania si o facem de forma diferita - cerc gol
  geom_point(data = gapminder_2018 %>% filter(country == "Romania"), 
             aes(x = gdpPerCap, y = lifeExp, color = continent, size = pop),
             shape = 1,
             stroke = 1.5)+
  # adaugam text pentru o serie de state (ggrepel)
  geom_text_repel(aes(x = gdpPerCap, y = lifeExp, label = country),
            color = "grey50",
            segment.size = 0.2,
            data = gapminder_2018 %>% 
              filter(pop > 1e9 | country %in% c("Moldova", 
                                                "United States", 
                                                "Romania", 
                                                "United Kingdom", 
                                                "France"))) +
  # schimbam scala pe x in scala logaritmica 
  scale_x_log10(limits = c(600, 75000),
                breaks = c(600, 1000, 2500, 5000, 10000, 
                           25000, 50000, 75000),
                label = scales::dollar_format(prefix = "", suffix = "$", accuracy = 1)) +
  # adaugam ani la scala de pe y
  scale_y_continuous(label = function(x) {return(paste(x, "ani"))}) +
  # schimbam etichetele si adaugam titlu
  labs(title = "GDP versus Speranta de  viata in 2018",
       caption = "Sursa: https://www.gapminder.org/",
       x = "GDP per capita (scala log)",
       y = "Speranta medie de viata",
       size = "Populatia",
       color = "Continent") +
  # schimbam marimea scalei
  scale_size(range = c(0.1, 10),
             # stergem legenda pentru size
             guide = "none") +
  # adaugam culori customizate pentru continente
  scale_color_manual(name = "",
                     values = c("#099DD7",
                                "#248E84",
                                "#F2583F",
                                "#96503F"),
                     guide = guide_legend(nrow = 1, order=1)) + 
  # schimbam tema
  theme_minimal() +
  # plasam legenda sus si scoatem gridul
  theme(legend.position = "top",
        axis.line = element_line(color = "grey85"),
        axis.ticks = element_line(color = "grey85"), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank())

Cu un pic mai mult efort se poate construi figura de mai jos care în plus evidențiază pentru fiecare continent în parte tendința (dreapta de regresie) corespunzătoare:

Figura 1: Ilustrarea relației dintre GDP și Speranța de viață pentru anul 2018.

Pentru cel de-al doilea grafic avem

countries <- c("Romania", "France", "Germany", "United Kingdom", "Italy", "Greece", 
              "United States", "Canada", "Brazil", "Mexico", 
              "China", "India", "Vietnam", 
              "Ethiopia", "South Africa", "Nigeria", 
              "Australia", "New Zealand")

gapminder_life_exp_diff <- gapminder_all %>%
  mutate(year = as.integer(year), 
         continent = four_regions) %>%
  # filtram anii de start si de final
  filter(year == 2000 | year == 2018) %>%
  # ne asiguram ca datele sunt aranjate astfel ca anul 2000 sa fie inaintea lui 2018 
  arrange(country, year) %>%
  # pentru fiecare tara adaugam variabila care ne da diferenta sperantei de viata 
  group_by(country) %>%
  mutate(lifeExp_diff = lifeExp[2] - lifeExp[1]) %>%
  ungroup() %>%
  # aranjam in ordinea diferentelor cele mai mari
  arrange(lifeExp_diff) %>%
  # restrangem la tarile selectate
  filter(country %in% countries) %>%
  select(country, year, continent, lifeExp, lifeExp_diff)
 

gapminder_life_exp_diff %>%
  mutate(country = fct_inorder(country)) %>%
  # pentru fiecare tara definim minimul si maximul sperantei de viata
  group_by(country) %>%
  mutate(max_lifeExp = max(lifeExp),
         min_lifeExp = min(lifeExp)) %>% 
  ungroup() %>%
  ggplot() +
  # trasam segmentele
  geom_segment(aes(x = min_lifeExp, xend = max_lifeExp, 
                   y = country, yend = country,
                   col = continent), alpha = 0.5, size = 5) +
  # adaugam punctele de capat
  geom_point(aes(x = lifeExp, y = country, col = continent), size = 8, 
             shape = 21, fill = "white", stroke = 2) +
  # adaugam elementele textuale
  geom_text(aes(x = min_lifeExp + 0.47, y = country, 
                label = paste(country, " ", round(min_lifeExp))), 
            col = "grey50", hjust = "right") +
  geom_text(aes(x = max_lifeExp - 0.4, y = country, 
                label = round(max_lifeExp)), 
            col = "grey50", hjust = "left") +
  # delimitam axa x 
  scale_x_continuous(limits = c(45, 85)) +
  # alegem culorile
  scale_color_manual(values = c("#099DD7",
                                "#248E84",
                                "#F2583F",
                                "#96503F")) + 
  # stabilim titlul si axele
  labs(title = "Schimbarea speranței de viață",
       subtitle = "Între anii 2000 și 2018",
       x = "Speranța de viață (în 2000 și 2018)",
       y = NULL, 
       col = "Continent: ") +
  # folosim tema clasica 
  theme_classic() +
  # eliminam axele si pozitionam legenda
  theme(legend.position = "top", 
        axis.line = element_blank(),
        axis.ticks = element_blank(),
        axis.text = element_blank())

Mai mult dacă dorim să ilustrăm evoluția speranței de viață în Europa evidențiind pentru fiecare țară în parte parcursul atunci putem obține un grafic de forma

Figura 2: Evoluția speranței de viață în Europa după anul 1900.

Atunci când dorim să salvăm un grafic putem folosi funcția ggsave() care prin comportamentul de bază salvează ultimul grafic generat. Funcția permite specificarea graficului pe care dorim să îl salvăm (plot =), locația și numele fișierului salvat (filename =), dimensiunea (width =, height =) precum și tipul acestuia (png, jpeg, tiff, pdf, tex, etc.).

De exemplu, pentru a salva figura generată de codul de mai sus (figura de la începutul capitolului) într-un fișier pdf în format landscape putem scrie

ggsave(filename = "grafic.pdf", 
       width = 11, height = 8.5)

ținând cont că acesta este ultimul grafic generat, în caz contrar trebuie să specificăm pe care grafic dorim să îl salvăm. Astfel, dacă figura este atribuită elementului p (p = ggplot(gapminder_2018) + ...) atunci pentru a salva scriem

ggsave(filename = "grafic.pdf",
       plot = p,
       width = 11, height = 8.5)

Exercițiul 1 Încercați să recreați grafice similare cu cel de la începutul capitolului (sau cel de mai sus) pentru alte seturi de date ce pot fi descărcate de pe platforma www.gapminder.org/data/.