Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAnalýza dat v R Grafické výstupy R Příklady k procvičení

Logo Matematická biologie

Příklady k procvičení

Budeme pracovat s datovou tabulkou states

> data(state)
> states <- data.frame(state.x77, state=row.names(state.x77), Region=state.region, Division = state.division, row.names=1:50)

1. Aplikujte funkci plot() obou typů zápisu (x,y) vs (x~y) na data states, a to jednak na dvě spojité proměnné (Income, Area, Population apod..), a jednak na dvojici kategoriální (Region) a některé spojité proměnné. Je důležitý typ zápisu x a y? Jaké grafy jste získali při kterých proměnných a zápisech?

Řešení

[

Nejdříve vyzkoušíme dvě spojité proměnné:

> plot(x=states$Income, y=states$Area)


> plot(states$Income ~ states$Area)

Výsledkem jsou v obou zápisech bodové grafy, rozdíl je, že u zápisu funkčního dojde k prohození osy x a y.

Vyzkoušíme spojitou a kategoriální proměnnou:

> plot(x=states$Income, y=states$Region)


> plot(states$Region ~ states$Income)

U nefunkčního zápisu je znovu výsledkem bodový graf, ale u zápisu funkčního dojde ke kategorizaci příjmu a obrázek je vykreslen jako frekvenční mozaikový graf.

]

2. V kapitole Tradiční grafika jsme si vykreslili dotchart pro počet úmrtí ve státu Virginie v roce 1940, kategorizován podle věkových kategorií, pohlaví a regionů.  Nakreslete stejný graf pro příjem (Income) kategorizován podle divize (Division) a regionu (Region).

Řešení

[

Nejdřív musíme z dat states s pomocí metod agregace vytvořit sumarizační tabulku příjmů v regionech a divizích. Použijeme funkce melt() a cast():

> states.melted<-melt(states, measure.vars = "Income")

> castres<-cast(states.melted, Division+Region~variable, fun.aggregate = mean)
> castres

            Division        Region   Income
1        New England     Northeast 4423.833
2    Middle Atlantic     Northeast 4863.000
3     South Atlantic         South 4355.250
4 East South Central         South 3563.750
5 West South Central         South 3773.500
6 East North Central North Central 4669.000
7 West North Central North Central 4569.714
8           Mountain          West 4402.250
9            Pacific          West 5183.200

Podívame se do nápovědy funkce dochart()

> ?dotchart

a sloupce tabulky castres vhodně použijeme jako argumenty x, lables a groups.

> dotchart(castres[,3], labels=castres[,1], group=castres[,2] )

]

3. Následující obrázek zobrazuje čtyři základní grafy vytvořené z tabulky states:

... upravte tyto grafy do této podoby - vše s použitím argumentů funkcí.

Řešení

[

Obrázek vlevo nahoře:

Podívame se do nápovědy funkce boxplot()

> ?boxplot

Hledaným argumentem je col=, kterým se mění vniřní barva boxplotů. Nakreslíme upravený obrázek:

> boxplot(states$Income~states$Region, col="red")

Obrázek vpravo nahoře:

Podívame se do nápovědy a spustíme příklady funkce pie():

> ?pie

> example(pie)

Zjistíme, že požadovaný obrázek je poslední příklad bez nadpisu

> n <- 200
> pie(rep(1, n), labels = "", col = rainbow(n), border = NA)

Obrázek vlevo dole:

Prozkoumáme obrázek a zjisíme, že se od předchozího líši v nadpisech os i obrázku a má také větší počet intervalů. Opět se podívame do nápovědy:

> ?hist

Dle popisu potřebujeme upravit argumenty: breaks=, xlab=, ylab= a main=:

> hist(states$Income, breaks=20, xlab="Prijem", ylab="Frekvencia", main="Moj histogram")

Obrázek vpravo dole:

Identifikujeme odlišnosti od původního obrázku

  • sloupce jsou uspořádány horizontálně
  • všechny popisky jsou taktéž orientovány horizontálně
  • místo názvu divizí je použito Divis 1, Divis 2 atd.

Znovu začneme vyvoláním nápovědy funkce barplot():

> ?barplot

Zde se dočteme, že pokud je argument horiz=TRUE jsou sloupce kresleny horizontálně a též, že argument names.arg= přidává popisky sloupců. Nápověda se nezmiňuje o argumentu pro kontrolu orientace popisků os ale zjišťujeme, že funkce pracuje s obecnými grafickými parametry přístupnými s pomocí funcke par(). Podíváme se proto do nápovědy k par():

> ?par

v té nalezneme argument las=, kterým se nastavuje orientace popisků u os. Hodnota 1 znamená horizontální umístění.

Zbýva tedy vytvořit vektor nových jmen pro divize:

> jmena<-paste("Divis", seq_along(levels(states$Division)))

a nakreslit obrázek:

> barplot(table(states$Region, states$Division), horiz=TRUE, names.arg=jmena, las=1)

]

4. Vytvořte reprezentativní obrázek ze souboru states o čtyřech grafech, ukazující Population a Area (histogram a bodový graf):

Řešení

[

Začneme obecným nastavením funkcí:

> par(mfrow=c(2,2))
> hist(states$Population)
> hist(states$Area)
> plot(states$Population)
> plot(states$Area)

Upravíme nadpisy:

> par(mfrow=c(2,2))
> hist(states$Population, ylab="Number of states", xlab="Population", main="")
> hist(states$Area, ylab="Numeber of states", xlab="Area", main="")
> plot(states$Population, ylab="Population")
> plot(states$Area, ylab="Area")

Vyrovnáme rozsahy os:

> par(mfrow=c(2,2))
> hist(states$Population, ylab="Number of states", xlab="Population", main="", ylim=c(0,42), xlim=c(0, 6e+05))
> hist(states$Area, ylab="Numeber of states", xlab="Area", main="", ylim=c(0,42), xlim=c(0,6e+05))
> plot(states$Population, ylab="Population", ylim=c(0, max(states$Area)))
> plot(states$Area, ylab="Area", ylim=c(0, max(states$Area)))

Nakonec přidáme upravení mezer. Protože změna okraju jednotlivých obrázků by nefungovala - obrázky by zůstaly stejné, změníme globální parametr mar=:

> par(mfrow=c(2,2), mar=c(5, 4, 0.5, 0.5))
> hist(states$Population, ylab="Number of states", xlab="Population", main="", ylim=c(0,42), xlim=c(0, 6e+05))
> hist(states$Area, ylab="Numeber of states", xlab="Area", main="", ylim=c(0,42), xlim=c(0,6e+05))
> plot(states$Population, ylab="Population", ylim=c(0, max(states$Area)))
>
plot(states$Area, ylab="Area", ylim=c(0, max(states$Area)))

 

]

5. Jak se dá nakreslit  tento obrázek pomocí funkce layout(), ale bez použití argumentů widths= a heights=?

Řešení

[

Stačí vytvořit vhodnou matici:

> mat<-matrix(0, nrow=4, ncol=4)
> mat[2:4,1:3]<-1
> mat[1,1:3]<-2
> mat[2:4,4]<-3
> mat

     [,1] [,2] [,3] [,4]
[1,]    2    2    2    0
[2,]    1    1    1    3
[3,]    1    1    1    3
[4,]    1    1    1    3

a můžeme kreslit:

> layout(mat)
> sepal.length.hist = hist(iris$Sepal.Length, plot = F)
> sepal.width.hist = hist(iris$Sepal.Width, plot = F)
> par(mar=c(3,2.5,1,1))
> plot(iris$Sepal.Length, iris$Sepal.Width,main = "")
> par(mar=c(0,3,1,1))
> barplot(sepal.length.hist$counts)
> par(mar=c(3,0,1,1))
> barplot(sepal.width.hist$counts, horiz = TRUE)

]

 

6. Nakreslete tyto objekty:

Řešení

[

Šestiuhelník:

Z geometrie zjistíme souřadnice x a y v rozmezí 0 až 1 a změníme barvu výplně, barvu a šířku čáry:

> grid.polygon(x=c(0.5,0.5+sqrt(3)/2*0.5,0.5+sqrt(3)/2*0.5,0.5,0.5-sqrt(3)/2*0.5,0.5-sqrt(3)/2*0.5),
+  y=c(0,0.25,0.75,1,0.75,0.25), gp=gpar(fill="cyan", col="green", lwd=5))

Kruh:

> grid.circle(r=0.4,gp=gpar(fill="grey", lwd=10))

Obdélník:

> grid.rect(width=0.5, height=0.5, gp=gpar(fill="yellow", col="red", lty=2, lwd=10))

Šipky:

> tmp<-c(0,0.2, 0.4, 0.6)-0.02
> matX<-matrix(c(tmp, tmp+0.2), byrow=T, nrow=2)
> matY<-matrix(c(0,1), ncol=4, nrow=2)
> grid.polyline(matX, matY, id.lengths=rep(2, 4), gp=gpar(col="blue", lwd=10))
> grid.lines(c(0.78,0.98), c(0,1),  gp=gpar(col="blue", lwd=10), arrow=arrow())

Text:

> grid.text("text", gp=gpar(col="orange", fontface="italic", cex=5))

Mřížka:

> vp <-viewport(width=0.8,height=0.8,name="view", xscale=c(0,1), yscale=c(0,1))
> pushViewport(vp)
> tmp<-c(0.25, 0.5, 0.75)
> matX<-matrix(tmp, byrow=T, nrow=2, ncol=3)
> matY<-matrix(c(0,1), ncol=3, nrow=2)
> grid.polyline(matX, matY, id.lengths=rep(2, 3), gp=gpar(lty=2))
> grid.polyline(matY, matX, id.lengths=rep(2, 3), gp=gpar(lty=2))
> grid.xaxis(seq(0,1,0.25))

]

7. V kapitole Další grid funkce jsme vytvořilli tento obrázek:

 

Změňte v tomto obrázku body za trojúhelníky modré barvy a popište osy. (Nápověda: použijte funkce grid.add a grid.edit).

 

Řešení

[

Nejdříve vytvoříme graf (stejným způsobem jako v kapitole Další grid funkce):

> vp <-viewport(width=0.8,height=0.8,name="view", xscale=c(0,10), yscale=c(0,10))
> x <- xaxisGrob(name = "axis1")
> y <- yaxisGrob(name = "axis2")
> points <- pointsGrob(1:9, 1:9, name="dataPoints")
> title <- textGrob("První graf",name="myTitle",x=0.1,y=0.9)
> tree <- gTree(name="Tree", vp=vp,     children=gList(x,y,title,points))
> grid.draw(tree)

Teď tento graf upravíme:

Změníme body

> grid.edit("dataPoints", pch=17, gp = gpar(col="blue"))

Vytvoříme a pridáme popisky
> popisx<-textGrob("os x", x=0.5, y=-0.1, name="popisX")
> grid.add("Tree", popisx)
> popisy<-textGrob("os y", x=-0.1, y=0.5, rot=90, name="popisY")
> grid.add("Tree", popisy)

]

 

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity