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())
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):
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:
Pentru cel de-al doilea grafic avem
<- c("Romania", "France", "Germany", "United Kingdom", "Italy", "Greece",
countries "United States", "Canada", "Brazil", "Mexico",
"China", "India", "Vietnam",
"Ethiopia", "South Africa", "Nigeria",
"Australia", "New Zealand")
<- gapminder_all %>%
gapminder_life_exp_diff 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
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/.