Joonised paketiga ggplot2.
Mis on ggplot2?
ggplot2 on populaarne R-i pakett, mis võimaldab suhteliselt vähese vaevaga joonistada ilusaid graafikuid. Kuna joonised on üles ehitatud kiht kihi haaval, on tegu väga paindliku tööriistaga, sest ühel graafikul saab kombineerida erinevaid elemente.
Suurepärane ülevaate paketi võimalustest annab ggplot2 dokumentatsioon http://docs.ggplot2.org/current/.
ggplot2 autoriks on Hadley Wickham. Pakett toetub nn graafikute grammatikale (Grammar of Graphics), mille avaldas Leland Wilkinson 2005. aastal. Selle grammatika eesmärk on kirjeldada, mida õieti kujutab endast üks graafik. Nii nagu tavakeeles defineerib grammatika sõnaliigid, mille kombineerimisel saame tekitada suvalisi lauseid, defineerib analoogiliselt graafikute grammatika sellised põhikomponendid, mille kombineerimisel on võimalik tekitada suvalisi graafikuid. Hadley on kirjutanud järgnevat:
In brief, the grammar tells us that a statistical graphic is a mapping from data to aesthetic attributes (colour, shape, size) of geometric objects (points, lines, bars).
qplot() ja ggplot() erinevused
Paketis on kaks funktsiooni jooniste tegemiseks, qplot()
ning ggplot()
. Järgnev loetelu aitab saada selgust, mis vahe neil funktsioonidel on.
Funktsioonil qplot
on mõned eelised võrreldes ggplot
-iga:
- Süntaks võib esialgu tunduda lihtsam, kui on varasem kogemus R-i baasgraafikaga, samuti on kood pisut lühem.
- On võimalik visualiseerida vektoreid, ilma et nad oleks mõne
data.frame
-i veerud.
Siiski on qplot
-il ka mitmeid puuduseid võrreldes võimalusterohkema funktsiooniga ggplot
:
- Piiratud võimalused: ggplot2 paketiga saab erinevate kihtide kombineerimisel teha väga paindlikke jooniseid, aga
qplot
funktsioon võimaldab korraga visualiseerida ainult ühte andmestikku, seejuures peavad kõigil kihtidel olema värv, punktisuurus, kuju jne samasugused. qplot
süntaks ei aita aru saada paketi loogikast (mis põhineb Grammar of Graphics-il), milliste kihtide kombineerimisel väljundgraafik loodi. Nii ei teki sügavamat arusaamist, kuidas pakett toimib ning kuidas vajadusel modifitseerida jooniseid.- Tegelikult on
qplot
funktsioon sisuliselt wrapperggplot
jaoks, nii et funktsioonigaggplot
saab teha kõike sedasama, midaqplot
iga, agaggplot
on palju paindlikum.
Kuna funktsioon ggplot
pakub oluliselt rohkem võimalusi graafikute tegemiseks, kasutame käesolevas kursuses ainult funktsiooni ggplot
.
Joonised funktsiooniga ggplot
Joonise tegemiseks tuleb alustada ggplot
objekti konstrueerimisest. Üks võimalus on seda teha järgnevalt
library(ggplot2)
ggplot(andmed, aes(x = tunnus1, y = tunnus2))
kus esimese argumendina on ette antud andmestik ning teise argumendina aesthetic mapping. Seejuures aes()
argumendid peavad olema ette antud andmestiku veergude nimed.
Praeguseks hetkeks pole veel võimalik joonist vaadata, sest me pole joonisele ühtegi kihti lisanud (st me pole spetsifitseerinud, milliseid elemente sooviksime joonisel näha - antud x, y koordinaadid oleks võimalik tähistada nii punktidega, tulpadega, ühendada joontega jne). Näiteks punktide joonistamiseks peaksime lisama joonisele punktide kihi käsuga geom_point()
.
Järgnevalt tutvume ggplot2 võimalustega näidete abil, mis põhinevad iiriste andmestikul
# lae andmestik "iris"
data(iris)
# vaatame andmestiku päist
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
geom_point()
Hajuvusdiagrammi (scatterplot) tegemiseks
ggplot(iris, aes(x = Sepal.Length, y = Petal.Length)) + geom_point()
millele saame ka värvi lisada colour = tunnuse_nimi
(võime colour
asemel kasutada ka color
või col
)
ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, colour = Species)) + geom_point()
Märkus: Samasuguse joonise saame ka järgnevate käskude tulemusena
# Eelistatud, kui soovime iga kihi jaoks kasutada erinevaid tunnuseid
# x, y koordinaatide jaoks, värvi jaoks jne,
# aga andmestik oleks kõigi kihtide jaoks sama
ggplot(iris) + geom_point(aes(x = Sepal.Length, y = Petal.Length, colour = Species))
# Eelistatud, kui soovime iga kihi jaoks kasutada erinevaid andmestikke
ggplot() + geom_point(data=iris, aes(x = Sepal.Length, y = Petal.Length, colour = Species))
Siin on näide, kuidas erinevate kihtide jaoks kasutada erinevaid andmetabeleid.
Mida teeb aes()?
Järgnev skeem selgitab, mida teeb funktsioon aes()
. Vasakul on näidatud meie esialgne andmestik, paremal selle esitus pärast aes
rakendamist (with variables mapped into aesthetic space). Täpsemalt,
- x koordinaadiks on Sepal.Length,
- y koordinaadiks on Petal.Length,
- värvi näitab Species,
nagu me ise spetsifitseerisime. Kuna punktide kuju ning suuruse kohta me midagi ei öelnud, anti neile vaikimisi väärtused.
facet_grid() ja facet_wrap()
Näiteks tunnuse Species
põhjal saame oma joonise jagada alamjoonisteks (tahkudeks) järgnevalt
ggplot(iris, aes(x = Sepal.Length, y = Petal.Length)) + geom_point() +
facet_wrap(~ Species)
geom_histogram()
ggplot(iris, aes(x = Petal.Length)) + geom_histogram()
# Saame histogrammi tulpasid värvida Species järgi
ggplot(iris, aes(x = Petal.Length, fill=Species)) + geom_histogram()
# Või jagada histogramm tahkudeks Species järgi, üksteise alla
ggplot(iris, aes(x = Petal.Length, fill=Species)) + geom_histogram() +
facet_wrap(~ Species, ncol=1)
# Mitteparameetriline tiheduse hinnang
ggplot(iris, aes(x = Petal.Length, fill=Species)) +
geom_density(alpha=0.5)
geom_boxplot() ja geom_jitter()
ggplot(iris, aes(x = Species, y = Petal.Length)) + geom_boxplot()
ggplot(iris, aes(x = Species, y = Petal.Length)) + geom_jitter()
# informatiivse joonise saame kahe eelneva kihi (boxploti ja punktide) kombineerimisel
ggplot(iris, aes(x = Species, y = Petal.Length)) +
geom_boxplot() + geom_jitter()
stat_smooth()
Saame lisada näiteks regressioonisirge iga grupi jaoks
ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, colour=Species)) +
geom_point() + stat_smooth(method="lm", se=FALSE)