# histograma
ggplot(gapminder_2018, aes(x = gdpPerCap)) +
geom_histogram()
# diagrama de imprastiere - scatterplot
ggplot(gapminder_2018, aes(x = gdpPerCap, y = lifeExp)) +
geom_point()
Obiecte geometrice (geometric objects)
Obiectele geometrice (geometric objects), sau geom
pe scurt, sunt elementele fundamentale ale unui grafic creat în ggplot2
, prin intermediul lor se efectuează reprezentarea a datelor, controlând tipul de grafic dorit. Ne includerea unui strat geom
în desen conduce la o figură goală (a se vedea mai sus). Majoritatea obiectelor geometrice sunt asociate unui grafic a cărui denumire este prestabilită, astfel geom_bar
corespunde unei diagrame cu bare (barplot), geom_line
corespunde unei diagrame liniare (linegraph), geom_histogram
corespunde unei histograme, geom_boxplot
corespunde unei diagrame de tip boxplot (cutie cu mustăți) ș.a.m.d. O excepție de la această regulă este dată de diagrama de împrăștiere (scatterplot) pentru care se folosește geom_point
.
Fiecare funcție geom
are propriile elemente estetice și argumente necesare pentru a ajusta modul în care este creat graficul. De exemplu, funcția geom_histogram
necesită doar elementul estetic x
pe când dacă dorim să trasăm o diagramă de împrăștiere avem nevoie atât de estetica x
cât și de y
. În contextul setului de date gapminder_2018
, variabila gdpPerCap
ne arată produsul intern brut pe cap de locuitor pentru fiecare țară iar variabila lifeExp
prezintă speranța medie de viață din țara respectivă. Pentru a vedea cum este distribuit produsul intern brut pentru anul 2018 vom trasa o histogramă a acestuia iar pentru a investiga relația dintre variabilele gdpPerCap
și lifeExp
vom ilustra o diagramă de împrăștiere:
Pentru fiecare funcție geom
există elemente estetice obligatorii și opționale. Majoritatea obiectelor grafice necesită elementele estetice x
și y
dar sunt și excepții precum geom_bar
sau geom_histogram
. De exemplu, în cazul funcției geom_point
, elementele estetice obligatorii sunt x
și y
iar cele opționale pot include: alpha
(transparență), colour
, fill
, size
, shape
sau stroke
. Trebuie menționat că elementele estetice pot să difere de la geom
la geom
în funcție de specificul vizual al fiecărui obiect grafic, de exemplu putem utiliza shape
ca estetică pentru geom_point
dar nu o putem utiliza și pentru geom_line
precum putem utiliza linetype
pentru geom_line
dar nu și pentru geom_point
.
În contextul setului de date gapminder_2018
vom utiliza atât estetica colour
pentru a diferenția țările în funcție de continent
cât și estetica size
pentru a scoate în evidență țările cu o populație (pop
) mai mare:
Pe lângă elementele estetice, funcțiile geom
admit și o serie de argumente specifice (care se regăsesc la secțiunea arguments în documentația acestora, e.g. ?geom_point
), de exemplu dacă dorim să modificăm numărul de subintervale (bins) folosit pentru trasarea unei histograme atunci putem utiliza argumentul bins =
:
# histograma
ggplot(gapminder_2018, aes(x = gdpPerCap)) +
geom_histogram(bins = 15)
Următorul tabel prezintă o serie de funcții geom
împreună cu elementele estetice obligatorii și o parte din argumentele specifice ale acestora.
geom
de bază împreună cu elementele estetice obligatorii și o parte din argumentele specifice ale acestora.
Funcția | Elemente estetice | Argumente opționale | Descriere |
---|---|---|---|
geom_point |
x, y | Trasează o diagramă de împrăștiere | |
geom_line |
x, y | arrow, na.rm | Trasează o diagramă liniară |
geom_segment |
x, y, xend, yend | arrow, na.rm | Trasează un segment de dreaptă |
geom_path |
x, y | na.rm | Trasează o linie poligonală |
geom_polygon |
x, y | Trasează o linie poligonală închisă (umplută) | |
geom_rect |
xmin, xmax, ymin, ymaxl | Trasează un dreptunghi | |
geom_histogram |
x | bins, binwidth | Trasează o histogramă |
geom_density |
x | Trasează o diagramă de densitate estimată prin nuclee | |
geom_dotplot |
x | bins, binwidth | Trasează o diagramă cu puncte similară diagramei cu bare |
geom_freqpoly |
x | binwidth | Trasează o linie poligonală de frecvență |
geom_bar |
x sau x, y | width | Trasează o diagramă cu bare |
geom_abline |
intercept, slope | Trasează drepte în care sunt specificate pantele și ordonatele la origine | |
geom_hline |
yintercept | Trasează drepte de referință orizontale | |
geom_vline |
xintercept | Trasează drepte de referință verticale | |
geom_smooth |
x, y | method, se, span | Adaugă o curbă de regresie |
geom_text |
x, y, label | Adaugă etichete text la puncte | |
geom_bin2d |
x, y | bins | Ilustrează o estimare a densității bivariate prin dreptunghiuri |
geom_hex |
x, y | bins | Ilustrează o estimare a densității bivariate prin hexagoane (faguri) |
Vom prezenta mai jos o parte dintre graficele generate de aceste funcții în contextul seturilor de date gapminder_all
și gapminder_2018
. Vom face separarea graficelor după numărul (una sau două) și tipul (discrete sau continue) variabilelor analizate:
- o variabilă discretă -
geom_bar()
- o variabilă continuă -
geom_histogram
,geom_density
,geom_dotplot
șigeom_freqpoly
# histograma
ggplot(gapminder_2018, aes(x = gdpPerCap)) +
geom_histogram()
# estimarea densitatii
ggplot(gapminder_2018, aes(x = gdpPerCap)) +
geom_density()
# dotplot
ggplot(gapminder_2018, aes(x = gdpPerCap)) +
geom_dotplot()
# diagrama de frecvente
ggplot(gapminder_2018, aes(x = gdpPerCap)) +
geom_freqpoly()
- două variabile ambele continue -
geom_point
,geom_line
,geom_smooth
,geom_bin2d
,geom_hex
, etc.
# Diagrama de imprastiere
ggplot(gapminder_2018, aes(x = gdpPerCap, y = lifeExp)) +
geom_point()
# Functia de regresie - default loess
ggplot(gapminder_2018, aes(x = gdpPerCap, y = lifeExp)) +
geom_smooth()
# Densitate bivariata
ggplot(gapminder_2018, aes(x = gdpPerCap, y = lifeExp)) +
geom_bind2d()
# Densitate bivariata
ggplot(gapminder_2018, aes(x = gdpPerCap, y = lifeExp)) +
geom_hex()
(ref:ggplot-c3-fig6) Exemple de utilizare a funcțiilor geom_point
, geom_line
, geom_smooth
, geom_bin2d
și geom_hex
.
- o variabilă continuă și una discretă -
geom_bar(stat = "identity")
(saugeom_col
),geom_boxplot
,geom_violin
, etc.
# datele
= gapminder_2018 %>%
gap1 filter(country %in% c("Romania", "United States", "France"))
# barplot
ggplot(gap1, aes(x = country, y = gdpPerCap)) +
geom_bar(stat = "identity")
# sau
ggplot(gap1, aes(x = country, y = gdpPerCap)) +
geom_col()
# boxplot
ggplot(gapminder_2018, aes(x = continent, y = gdpPerCap)) +
geom_boxplot()
- o variabilă continuă și alta de tip temporal:
geom_line
,geom_area
# diagrama liniara
ggplot(gapminder_all %>% filter(country == "Romania"),
aes(x = as.numeric(year), y = gdpPerCap)) +
geom_line()
# area plot
ggplot(gapminder_all %>% filter(country == "Romania"),
aes(x = as.numeric(year), y = gdpPerCap)) +
geom_line()
Ceea ce face pachetul ggplot2
cu adevărat puternic este că acesta permite construcția de figuri complexe prin adăugarea mai multor obiecte grafice la aceeași figură, suprapunând straturile determinate de ele. Să considerăm setul de date gapminder_2018
și să adăugăm la diagrama de împrăștiere a variabilelor gdpPerCap
și lifeExp
relația liniară determinată de dreapta de regresie:
Trebuie remarcat faptul că putem utiliza elemente estetice diferite pentru fiecare obiect geometric folosit, de exemplu în figura anterioară putem schimba culoarea punctelor și a dreptei de regresie.
De asemenea, este posibil să atribuim fiecărui strat geom
propriul set de date astfel încât să putem utiliza mai multe seturi de date pentru a scoate în evidență caracteristicile de interes ale graficului (variabilelor). În contextul diagramei de împrăștiere dintre produsul intern brut pe cap de locuitor și speranța medie de viață pentru setul de date gapminder_2018
vrem să adăugăm numele (etichetele - label) țărilor care au mai mult de 200 milioane de locuitori și să colorăm punctele în roșu. Pentru început, vom construi setul de date cu țările corespunzătoare și apoi vom adăuga informația folosind geom_text
. Etichetarea elementelor grafice se poate face cu geom_text
sau geom_label
dar atunci când punctele sunt foarte aglomerate se pot folosi și funcții alternative precum cele din pachetul ggrepel
(geom_text_repel
sau geom_label_repel
). Pentru a colora punctele vom folosi estetica colour
într-un nou strat geom_point
. :
<- gapminder_2018 %>%
tari_mari filter(pop > 2e8)
ggplot(gapminder_2018, aes(x = gdpPerCap, y = lifeExp)) +
geom_point() +
geom_point(data = tari_mari,
aes(x = gdpPerCap, y = lifeExp),
colour = "brown3", size = 3) +
geom_text(data = tari_mari, aes(label = country))
Sunt și situații în care dorim să separăm datele în grupuri dar vrem să le redăm în același mod, de exemplu atunci când avem un studiu longitudinal (studiu care presupune observații repetate asupra acelorași variabile) cu mai mulți subiecți. Acest tip de situație, întâlnit în cazul în care un geom
afișează observații multiple printr-un singur obiect geometric (e.g. geom_boxplot
), necesită separarea pe grupe a observațiilor, fapt realizat prin intermediul elementului estetic group
. Pentru o mai bună înțelegere vom ilustra acest concept folosind setul de date gapminder_all
. Să presupunem că dorim să afișăm evoluția duratei medii de viață după anul 1900 pentru o submulțime de țări (Romania, Moldova și France).
%>%
gapminder_all filter(as.numeric(year) > 1900) %>%
filter(country %in% c("Romania", "Moldova", "France")) %>%
ggplot(aes(x = year, y = lifeExp)) +
geom_point()+
geom_line()
%>%
gapminder_all filter(as.numeric(year) > 1900) %>%
filter(country %in% c("Romania", "Moldova", "France")) %>%
ggplot(aes(x = year, y = lifeExp, group = country, colour = country)) +
geom_point()+
geom_line()