6 . Kapitulua Grafikoak Rn
R lengoaiak datuak bistaratzeko aukera asko ematen ditu. Kapitulu honetan oinarrizko instalazioak dakartzan aukera ohikoenak aztertuko ditugu. Ondoren, sistema aurreratu batzuei sarrera labur bat emango diegu. Amaitzeko, grafikoak fitxategietan nola gorde daitezkeen azalduko dugu.
6.1 Oinarrizko grafikoak
Rko oinarrizko instalazioak hainbat funtzio ditu grafiko mota ezberdinak egiteko. Horrez gain, grafikoen itxura kontrolatzeko eta grafiko konposaketak sortzeko funtzioak ere eskuragarri ditugu pakete estrarik instalatu gabe. Atal honetan Rrekin datozen funtzio nagusienak aztertuko ditugu.
6.1.1 plot
, lines
eta points
funtzioak
R lengoaian grafikoak egiteko funtziorik sinpleena plot
funtzioa da. Funtzio hau objektu mota ezberdinentzako inplementatuta dagoenez, funtzio berdinak emaitza ezberdinak eman ditzake. Kasurik sinpleenean dispertsio-grafikoak egiteko erabil dezakegu, bi bektore, x
eta y
, emanik:
x <- runif(150) # Ausazko 150 zenbaki sortzen ditu [0,1] tartean.
y <- log(x)
plot(x=x, y=y)

Irudia #6.1: Dispertsio-grafiko sinple bat
Emaitza 6.1 irudian dago. Ikus daitekeen bezala,plot
funtzioak bi bektoreak hartzen ditu eta, elementu bakoitzeko, puntu bat gehitzen dio grafikoari, X koordenatua x
bektoretik hartuz eta Y koordenatua y
bektoretik. Funtzioak beste hainbat parametro ditu. Geroago (6.1.3 atalean: Parametro grafikoak) xehetasun gehiagokin ikusiko ditugu aukera horiek. Bitartean, hona gehien erabiltzen diren argumentuak:
xlim
etaylim
- Biak bi tamainako bektoreak dira eta X edota Y ardatzaren mugak adierazteko erabil daitezke (bektorearen lehenengo elementua balio minimoa eta bigarren elementua balio maximoa)main
etasub
- Grafikoari titulua eta azpititulua gehitzeko erabil daitezke. Bien kasuan karaktere-bektore bat pasatu behar diegu.xlab
etaylab
- Grafikoaren ardatzen izenak aldatzeko erabiltzen dira bi argumentu hauek.col
- Puntuen kolorea aldatzeko erabil daiteke. Argumentu honek zenbakizko balioak edo karaktere-bektoreak jaso ditzake9.pch
- Argumentu honek puntuak adierazteko erabiltzen den karakterea adierazten du. Zenbaki oso bat (1etik 25era) edo karaktere bat izan daiteke.type
- Puntuak bistaratu beharrean marra bat marraztu nahi badugu, argumentu honi'l'
balioa eman behar diogu, edo'b'
puntuak eta marra marraztu nahi badugu. Balio horiez gain beste hainbat aukera ditugu (ikusi funtzioaren laguntza).
Ikus dezagun adibide bat argumentu guzti hauekin (emaitza 6.2 irudian).
x <- seq(from=-5, to=5, by=0.5)
y <- runif(length(x)) # x-en tamainako bektore bat, [0,1] tarteko ausazko zenbakiekin.
plot(x=x, y=y, xlim=c(-3, 5), ylim=c(0, 1),
type='b', main="Nire grafikoa",
xlab="X ardatza", ylab="Y ardatza",
col="dodgerblue4", pch=13)

Irudia #6.2: plot
funtzioaren erabileraren beste adibide bat
Lehen esan bezala, plot
funtzioa generikoa da. Horrek esan nahi du hainbat objektu motarentzat inplementatuta dagoela; Lortutako emaitza objektu motaren araberakoa izango da. Adibide moduan, denbora serie bat sortuko dugu ts
funtzioa erabiliz eta, ondoren, denbora serie hori marraztuko dugu (emaitza 6.3 irudian).
seriea <- ts(runif(10), frequency = 4, start = c(1959, 2))
plot(seriea, main="Denbora serie baten grafiko bat")

Irudia #6.3: Denbora serie baten grafikoa
Adibidean ikus daitekeen bezala, zenbait parametroen balioa ezarrita dago, marraztu nahi dugun objektua ts
klasekoa delako. Adibidez, automatikoki, lerro diagrama bat burutu da.
Batzuetan, sortutako grafikoei beste marra edo puntu multzo batzuk gehitu beharko diegu. Horretarako bi funtzio ditugu, points
eta lines
. Funtzio horien funtzionamendua plot
funtzioaren berdina da, baina emaitza grafiko berri batean sartu beharrean uneko grafikoan gehitzen da.
x <- seq(from=-10, to=10, by=0.1)
y.1 <- runif(n=length(x), min=0, max=1) # 0 eta 1 arteko 201 ausazko zenbaki
y.2 <- runif(n=length(x), min=2, max=3) # 2 eta 3 arteko 201 ausazko zenbaki
y.3 <- runif(n=length(x), min=5, max=6) # 5 eta 6 arteko 201 ausazko zenbaki
plot(x=x, y=y.1, type='l',
xlab="X ardatza", ylab="Y ardatza", ylim=c(0,6))
lines(x=x, y=y.2, col="darkred")
lines(x=x, y=y.3, col="darkgreen")

Irudia #6.4: Grafiko batean marra bat baino gehiago izan ditzakegu
Goiko kodearekin sortutako grafikoa 6.4 irudian ikus dezakezu.
Gainera, grafiko bati lerro horizontal edo bertikal bat gehitu nahi badiogu, abline
funtzioa erabili dezakegu:
x <- seq(from=0, to=20, by=0.1)
y <- log(x)
plot(x=x, y=y, type='l',
xlab="X ardatza", ylab="Y ardatza")
abline(h=2, col="red") # Lerro horizontala
abline(v=2, col="green") # Lerro bertikala

Irudia #6.5: Grafiko batean marra bat baino gehiago izan ditzakegu
6.1.2 Beste ohiko grafiko mota batzuk
Dispertsio- eta marra-grafikoaz gain, badaude grafiko mota batzuk oso erabiliak direnak. Atal honetan batzuk aipatuko ditugu, barra-diagramak, histogramak eta kutxa-diagramak.
Aldagai kualitatibo edo diskretu bat irudikatzeko barra-diagramak barplot
funtzioa erabiliz sor ditzakegu. Ikus dezagun adibide bat (emaitza 6.6).
altuera <- c(290, 246, 211, 191, 149)
etiketa <- c("Ane", "June", "Nahia", "Irati", "Uxue")
kolorea <- rainbow(5)
barplot(height=altuera, legend.text=etiketa, col=kolorea)

Irudia #6.6: Barra-diagrama baten adibidea
Barra-diagramak egiteko barra bakoitzaren altuera, hau da, modalitate bakoitzaren maiztasuna (absolutua edo erlatiboa) behar dugu. Horrez gain, barra bakoitzari etiketa bat eta kolore bat eslei diezaiokegu10. Barra-diagrama konplexuagoak egin daitezke, altuera-bektore bat pasatu beharrean matrize bat pasatuz. Kontsulta ezazu funtzioaren laguntza informazio gehiago izateko.
Aldagai jarraitu (edo modalitate askoko aldagai diskretu) bat badugu, histograma baten bidez irudikatu dezakegu. R lengoaian histogramak hist
funtzioa erabiliz era sinplean sor daitezke. Adibidez Rn topa daitekeen iris
datu baseko Sepal.Width
aldagaia irudikatu dezakegu:
hist(iris$Sepal.Width, breaks=25)

Irudia #6.7: Histograma baten adibidea
Emaitza @reffig(fig:hist) irudian ikus dezakezu. Beste funtzioak bezala, hist
funtzioak hainbat parametro ditu emaitzaren itxura aldatzeko. Parametro horien artean interesgarriena breaks
da, zeinek X ardatza zein tartetan banatuko den adierazten duen.
Atal honekin amaitzeko, kutxa-diagramak nola egiten diren ikusiko dugu. Kasu honetan, boxplot
funtzioari bektore bakar bat pasatzen badiogu kutxa bakarra sortuko du.
boxplot(iris$Sepal.Width)

Irudia #6.8: Kutxa-diagrama adibide bat
Askotan kutxa ezberdinak irudikatu nahi ditugu aldi berean, adibidez, bi aldagai (bat jarraitua eta bat kualitatiboa) aztertu nahi baditugu aldi berean. Adibidez, irudika dezagun iris
datu baseko Sepal.Width
aldagai jarraitua, Species
aldagaiaren arabera (ikusi emaitza 6.9):
boxplot(iris$Sepal.Width~iris$Species, col="red")

Irudia #6.9: Kutxa-diagrama adibide bat
Ohartu, boxplot
funtzioari ere parametro gehiago gehitu diezazkiogula, kolorea adibidez.
6.1.3 Parametro grafikoak
Aurreko atalean zenbait parametro ikusi ditugu. Berez, parametro asko daude grafikoen itxura kontrolatzeko (letra tamainak, lerroen lodierak, etab.). Parametro-zerrenda osoa ikustea ezinezkoa da (?par
exekutatuz lor dezakezu), beraz atal honetan bereziki interesgarriak diren parametro batzuk aztertuko ditugu:
bty
- Parametro honekin grafikoen markoa kontrola dezakegu. Gehien bat marko hori kentzeko erabiltzen da,bty='n'
aukera gehituz.cex
- Letra eta karaktereen tamaina aldatzeko parametroa. Zenbakizko balioak hartzen ditu.lwd
- Marren lodiera aldatzeko parametroa.lty
- Marra mota aldatzeko parametroa. Zenbakizko balioak hartzen ditu.xlog
etaylog
- Balio logikoak.TRUE
bada, X edota Y ardatza(k) eskala logaritmikoan marraztuko dira.
6.1.4 layout
funtzioa
Batzuetan irudi berdinean grafiko bat baino gehiago sartu nahi dugu. R lengoaian layout
funtzioa erabil dezakegu leihoa (edo fitxategia) zatitan banatzeko, gero zati bakoitzean grafiko bat marrazteko. Zati horiek matrize baten bidez definitzen dira, non matrizeak leiho nagusia adierazten duen eta matrizeko balioak (zenbaki kontsekutiboak) leihoan sortuko ditugun zatiak identifikatzen dituzten, bakoitzaren ordena zehaztuz.
Ikus dezagun adibide bat, kontzeptua argitzeko. Lehenik, matrize bat sortuko dugu hiru grafiko marrazteko eskema deskribatzeko. Eskema horretan leiho nagusia horizontalki bi zatitan banatuko dugu, eta beheko zatian grafiko bakarra sartuko dugu. Goiko zatitan, berriz, bi plot sartuko ditugu, biak tamaina berdinekoak. Eskema hori adierazteko ondoko matrizea behar dugu:
eskema <- matrix(c(1,2,3,3), byrow=TRUE, ncol=2)
eskema
## [,1] [,2]
## [1,] 1 2
## [2,] 3 3
Leihoa eskema horren arabera zatitzeko layout
funtzioa erabili behar dugu. Ondoren, hiru plot sartuko ditugu. Kontutan izan lehenengo plota 1
balioa erabiliz definitu dugun zatian marraztuko dela, bigarrena 2
balioa erabiliz definitutakoan eta azkena 3
balioaren bidez adirazitako zatian.
layout(mat=eskema)
x <- runif(100)
y <- exp(x) + runif(100, 0, 0.25)
boxplot(x, main="1. Grafikoa")
boxplot(y, main="2. Grafikoa")
plot(x, y, main="3. Grafikoa")

Irudia #6.10: Grafiko bat baino gehiago batera marraz daitezke
Goiko kodearekin sortutako grafikoak 6.10 irudian ikus dezakezu. Era berean, beste konfigurazio posible bat 6.11 irudian ikus dezakegu eta kode honen bitartez lortzen da:
eskema <- matrix(c(1,2,3,2), byrow=TRUE, ncol=2)
layout(mat=eskema)
boxplot(x, main="1. Grafikoa")
boxplot(y, main="2. Grafikoa")
plot(x, y, main="3. Grafikoa")

Irudia #6.11: Grafiko bat baino gehiago batera marraz daitezke
6.2 Grafikoak fitxategietan gorde
Orain arte grafikoak sortu ditugu non sortzen diren kontutan izan gabe. R lengoaian graphical device kontzeptua dugu, alegia, grafikoak sortzeko euskarriak. Bi euskarri mota ditugu, sistemaren leihoak (orain arte erabili ditugunak) eta fitxategiak.
Hainbat fitxategi mota erabil ditzakegu euskarri moduan, hala nola, PDFak eta png-ak. Fitxategi mota bakoitza sortzeko funtzio bat dugu (pdf
, png
, jpg
, etab.). Oro har, funtzio guztietan hiru parametro nagusi ditugu, file
, fitxategiaren bide-izena adierazteko eta width
eta height
, grafikoaren tamaina adierazteko. Tamainaren aldetik, kontutan izan behar da irudi bektorialeko fitxategietan (PDF, adibidez) tamainak hazbetetan adierazten direla defektuz, baina bit-mapako fitxategietan tamainak pixeletan jarri behar dira. Puntu hori oso garrantzitsua da, ezer gehiago aldatzen ez badugu letraren tamainan eragina izango baitu (geroz eta fitxategi txikiagoak, orduan eta letra tamaina handiagoa).
Grafiko bat fitxategi batean sortzeko hiru pausu hartu behar ditugu. Lehenengoa, fitxategia sortu, bigarrena, grafikoa egin, hirugarrena, fitxategia itxi. Hona hemen adibide bat, PDF fitxategi batekin.
pdf(file="grafiko_adibidea.pdf", width=8, heigh=6)
barplot(height=altuera, legend.text=etiketa, col=kolorea)
dev.off()
## png
## 2
Azken agindua, dev.off()
, uneko euskarria ixteko erabiltzen da. Adibidean uneko euskarri hori PDF bat denez, agindu horrekin fitxategia ixten dugu (uneko euskarria leiho bat izanez gero, leiho hori itxiko genuke). Kontutan izan R interpreteak, beste zer edo zer esan ezean, uneko euskarri erabiltzen duela, beraz, grafiko berri bat egin nahi dugunean, aurretik dev.off
funtzioa erabili behar da irekita egon daitezkeen euskarri guztiak ixteko.
Grafikoak zuzenean fitxategietan sortu nahi ez badugu, leihoan dagoen grafikoa kopiatu dezakegu dev.copy2pdf
funtzioa erabiliz edo, RStudio erabiltzen badugu, interfazeak ematen duen aukera erabiliz.
6.3 Beste sistema batzuk
R lengoaiaren oinarrizko instalazioak grafikoak egiteko aukera asko ematen ditu, baina badaude pakete asko eskuragarri grafiko sofistikatuagoak egiteko. Atal honetan, horietako batzuk aztertuko ditugu laburki.
6.3.1 ggplot2 paketea
Gaur egun Rn grafikoak egiteko pakete hedatuena ggplot2 da. Pakete honek grafikoak egiteko filosofia berezi bat inplementatzen du. Alde batetik, guk datu batzuk izango digutu (pentsatu matrize bat dugula, non errenkada bakoitza item bat den eta zutabe bakoitzak item hori deskribatzen duen aldagai bat den). Bestetik, datu horiek bistaratu nahi ditugu eta, horretarako, aldagaiak (zutabeak, alegia) eta grafikoaren elementu estetikoak (kokapena, forma, kolorea, etab.) mapeatu behar ditugu. Dispertsio-grafiko batean, adibidez, normalean bi aldagai izaten ditugu, eta aldagai horiek grafikoaren bi ezaugarri estetikokin mapeatzen ditugu, bat kokapen horizontalarekin (X ardatza) eta bestea kokapen bertikalarekin (Y ardatza). Horrelako grafiko batean informazio gehiago sartzerik badaukagu, beste elementu estetiko erabiliz, hala nola, puntuen tamaina eta kolorea.
ggplot2 paketea erabiltzeko datuak formatu konkretu batean egon behar dira: data.frame
bat non errenkada bakoitza puntu bat den eta zutabe bakoitza aldagai bat. Datuak formatu horretan ez badaude, grafikoa egin aurretik prestatu behar ditugu. Jarraian dagoen adibidean Eustatetik deskargatutako errolda datuak erabiliko ditugu. Zehazki, lurralde bakoitzeko, urtez urte zenbat emakume eta gizon jaio diren izango dugu.
datu.gordinak <- read.csv("biztanleria.csv", header=FALSE,
stringsAsFactors=FALSE)
head(datu.gordinak)
## V1 V2 V3 V4 V5 V6 V7
## 1 NA EAE EAE EAE Araba Araba Araba
## 2 NA Guztira Gizonezkoak Emakumezkoak Guztira Gizonezkoak Emakumezkoak
## 3 2016 18182 9255 8927 3074 1546 1528
## 4 2015 18946 9703 9243 3245 1669 1576
## 5 2014 19456 9870 9586 3327 1706 1621
## 6 2013 19293 9871 9422 3146 1653 1493
## V8 V9 V10 V11 V12 V13
## 1 Bizkaia Bizkaia Bizkaia Gipuzkoa Gipuzkoa Gipuzkoa
## 2 Guztira Gizonezkoak Emakumezkoak Guztira Gizonezkoak Emakumezkoak
## 3 9108 4649 4459 6000 3060 2940
## 4 9298 4846 4452 6403 3188 3215
## 5 9702 4917 4785 6427 3247 3180
## 6 9726 4950 4776 6421 3268 3153
Ikus daitekeenez, datuak ez daude behar dugun formatuan eta, hortaz, taula eraldatu behar dugu. Horretarako lapply
funtzioa erabiliko dugu zerrenda batean lurralde eta talde bakoitzeko datuak ateratzeko eta, ondoren, do.call
funtzioa erabiliko dugu datu guztiak bata bestearen atzetik jartzeko.
a <- lapply(2:ncol(datu.gordinak),
FUN=function(i){
return(data.frame(Urtea=datu.gordinak[-(1:2), 1],
Lurraldea=datu.gordinak[1, i],
Taldea=datu.gordinak[2, i],
Jaiotzak=as.numeric(datu.gordinak[-(1:2), i])))
})
datu.prozesatuak <- do.call(rbind, a)
datu.prozesatuak[sample(1:nrow(datu.prozesatuak), size=10), ]
## Urtea Lurraldea Taldea Jaiotzak
## 615 1922 Araba Emakumezkoak 277
## 383 1946 Araba Guztira 3406
## 70 1947 EAE Guztira 24015
## 512 1921 Araba Gizonezkoak 56
## 1169 1992 Gipuzkoa Emakumezkoak 3016
## 738 2007 Bizkaia Gizonezkoak 5466
## 1176 1985 Gipuzkoa Emakumezkoak 3692
## 194 1927 EAE Gizonezkoak 2215
## 493 1940 Araba Gizonezkoak 1201
## 755 1990 Bizkaia Gizonezkoak 5099
Behin datuak prest, hainbat motako grafikoak egin ditzakegu ggplot
erabiliz. Lehenengoa marra-grafiko bat izango da, mapeo hauek eginez:
- X ardatza - Urtea
- Y ardatza - Jaiotzak
- Kolorea - Lurraldea (EAE kenduta)
- Lerro-mota - Taldea (‘Guztira’ kenduta)
Datu guztiak erabiliko ez ditugunez, lehenik aukeraketa egin behar dugu.
df <- subset(datu.prozesatuak,
subset=datu.prozesatuak$Lurraldea!='EAE' &
datu.prozesatuak$Taldea!='Guztira')
Grafikoa egiteko lehenik ggplot
funtzioa erabili behar dugu, datuak pasatzeko eta egin nahi dugun mapeoa ezartzeko. Ondoren, nahi ditugun geruza guztiak gehi ditzakegu geom_
hasten diren funtzioekin. Gure kasuan marrak egingo ditugu (geom_line
) eta, gainetik, puntuak jarriko ditugu (geom_point
).
library(ggplot2)
ggplot(data=df, mapping=aes(x=Urtea, y=Jaiotzak,
color=Lurraldea, linetype=Taldea)) +
geom_line() + geom_point(size=1)

Irudia #6.12: Populazioaren eboluzioa, ggplot2 paketearekin sortutako grafiko baten bidez bistaratuta
Sortutako grafikoa 6.12 irudian dago. Ikus daitekeen bezala, mapeoa egiteko aes
funtzioa erabili behar dugu eta, zuzenean, elementu estetikoei data.frame
egituran ditugun aldagaiak esleitzen diegu. ggplot2 paketak duen abantaila da era sinplean oso plot mota ezberdinak egin ditzakegula. Ikusi, adibidez, jarraian dagoen adibidea (datu berdinak erabiliz, baina kasu honetan kopuru totalekin) (emaitza 6.13 irudian):
df <- subset(datu.prozesatuak,
subset=datu.prozesatuak$Lurraldea=='EAE' &
datu.prozesatuak$Taldea!='Guztira')
ggplot(df, mapping=aes(x=Urtea, y=Jaiotzak, fill=Taldea)) +
geom_bar(stat="identity", position="dodge")

Irudia #6.13: ggplot2 paketeko beste adibide bat
Kasu honetan barra-grafikoa egin dugu, geom_bar
funtzioa erabiliz. Funtzioan bi argumentu ditugu, lehenengoa zuzenean pasatzen dizkiogun Y balioak hartzeko esateko eta bestea kolore ezberdineko barrak elkarrondoan jartzeko esateko. Hare gehiago, era sinple batean grafiko ezberdinak sartu daitezke (emaitza 6.14 irudian):
df <- subset(datu.prozesatuak,
subset=datu.prozesatuak$Lurraldea!='EAE' &
datu.prozesatuak$Taldea!='Guztira')
ggplot(df, mapping=aes(x=Urtea, y=Jaiotzak, fill=Taldea)) +
geom_bar(stat="identity", position="dodge") +
facet_grid(.~Lurraldea) + theme(legend.position="bottom")

Irudia #6.14: Grafiko bat baino gehiago irudi batean, ggplot2 paketea erabiliz
6.3.2 Grafiko interaktiboak
ggplot2 paketea grafikoak egiteko gehien erabiltzen dena da, baina ez bakarra. Badaude hainbat pakete oso interesgarriak direnak eta, horien artean, batzuk grafiko interaktiboak sortzeko erabil daitezke. Horien artean googleVis paketea dugu, zeinek Google Chart Tools erabiltzen du grafikoak egiteko. Interaktiboak direnez, ez dira zuzenean leiho batean bistaratzen, paketeak web orriak sortzen ditu grafikoak bistaratzeko. Informazio gehiago paketearen dokumentazioan topa dezakezue.
6.4 Ariketak
1. ariketa Irudikatu, Rko oinarrizko funtzioak erabiliz, ondo funtzio hauek:
- \(y=e^x\)
- \(y=sin(x)\)
- \(x^2 + y^2 = 100\)
2. ariketa Irudikatu goiko funtzioak ggplot2 paketea erabiliz.
3. ariketa Bilatu nola egin zurtoin-eta-hosto diagramak R lengoaian eta sortu grafiko bat nahi duzun datuekin (hartu adibidez, klaseko apunteetako adibidea).
4. ariketa Sektore-diagramak egiteko pie
funtzioa erabil dezakezue. Funtzioaren laguntza kontsultatuz, egin horrelako grafiko bat 6.1.2 ataleko nesken izeneko datuak bistaratzeko
5. ariketa Kargatu datuen karpetan dagoen Europako_populazioa.csv fitxategia. Bertan Europako lurraldeen populazioaren eboluzioa duzue, 2008tik 2017ra. Egin marra-grafiko bat Suediako populazioa urtez urte erakusteko. Grafikoan bi marra egon behar dira, bat genero bakoitzeko. Egin plot berdina Danimarkarako.
Karaktere-bekotoreek kolorearen izena adierazten dute. Gauzak horrela,
col='red'
edocol='green'
idatzi dezakegu. Aukera guztiak dokumentu honetan topa ditzakezu.↩Kasu honetan koloreak eskuz definitu beharrean paleta bat sortu dugu,
rainbow
funtzioa erabiliz. Laburki, funtzio honi zenbat kolore behar ditugun pasatzen diogu eta funtzioak kolore bektore bat itzultzen digu. Paletak sortzeko beste hainbat funtzio daude:hsv
,hcl
,gray
,heat.colors
etatopo.colors
↩