Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAnalýza dat v R Grafické výstupy R Grid grafika

Logo Matematická biologie

Grid grafika

Knihovna grid obsahuje nástroje pro grid grafiku, která používá funkce nízkého stupně pro vytvoření grafů zpětně editovatelných i po vykreslení.

> library(grid)

Všechny kresby se zobrazují v tzv. viewportu - obdélníkové oblasti s vlastními systémovými koordináty, nazvanými npc - normalized parent coordinates:
 
> grid.show.viewport(viewport())
 

 
V základním nastavení, modrá oblast viewportu koresponduje s plot region, šedá oblast pak s figure region tradičního grafického okna. Viewport začíná na pozici c(0,0), šířka a výška je 1 jednotka, (0.5, 0.5) je centrální bod.
 
Funkce viewport() nastavuje vlastnosti viewportu. Například, chceme-li změnit oblast nebo úhel vykreslení napříč grafickým oknem, použijeme argumenty width=, height= a angle=:
> vp <- viewport(width = 0.5, height = 0.2, angle = 45)
> grid.show.viewport(vp)

 
 
Na rozdíl od tradiční grafiky, v grid grafice je graf reprezentován jako množina objektů, které jsou vykreslovány do stromu viewportů.
 
Strom viewportů se tvoří vnořením viewportů do sebe. Funkce vždy kreslí objekty do aktivního viewportu.
 
POZOR - vytvoření viewportu pomocí funkce viewport() pouze zadefinuje kontext kreslení, ale nezařadí ho do stromu viewportů.
Zařazení do stromu se děje až s použitím funkce pushViewport(..., recording = TRUE)
Odstranění viewportu se pak děje pomocí popViewport(n, recording = TRUE)

Ve stromu viewportů můžeme navigovat pomocí funkcí:

downViewport(name, strict = FALSE, recording = TRUE) # jdi do dceřiného viewport (o úroveň níže)
upViewport(n, recording = TRUE) # zaktivuj rodičovský viewport (o n úrovní výše, n=1 defaultně)
seekViewport(name, recording = TRUE) # zaktivuj viewport kdekoliv ve stromě (zavolání jménem)
current.viewport() # zobraz aktuální viewport
current.vpTree() # zobraz celý strom
 
Strom viewportů má vždy jeden kořenový (root) viewport (vytvořený systémem), který představuje celé grafické rozhraní.
 
Při kreslení dále platí:
 
  • Vždy je aktivní pouze jediný viewport, který je aktuální pozicí ve stromu
  • Všechno kreslení a operace s viewportem jsou provedeny relativně k aktivnímu viewportu
  • Právě vytvořený viewport se stává aktivním viewportem
  • Pokud je viewport zrušen, stává se aktivním viewport rodičovský
  • Pokud má právě vytvořen viewport stejný název jako jiný na stejné úrovni, tak přepisuje ten již existující ve stromě
 
Základní grafické objekty grid jsou čtverec, křivka, polygon, kruh a text. Funkce, kterými se tyto objekty tvoří, jsou:
grid.rect()
grid.lines()
grid.polygon()
grid.circle()
grid.text()

Každá funkce grid.* má ekvivalentní funkci *Grob, která vrací grafický objekt, ale nevykresluje ho:
grid.rect() ... rectGrob()
grid.lines() ... linesGrob()
grid.polygon() ... polygonGrob()
grid.circle() ... circleGrob()
grid.text() ... textGrob()


Použití je následovné. Nejdříve definujeme pomocí funkce rectGrob() čtverec:
> rect <- rectGrob()

Pak jej s pomocí grid.draw() funkce vykreslíme:
> grid.draw(rect)

Nebo alternativně čtverec vykreslíme rovnou s pomocí grid.rect():

> grid.rect()

Můžeme měnit velikost a pozici grafického výstupu vzhledem k velkému počtu systémových koordinát:
> grid.rect(x = unit (0, "native"), y = unit (1.5, "npc"), height = unit (0.5, "inches"), width = unit (0.8, "lines"))

Můžeme také specifikovat různé grafické parametry pomocí funkce gpar() - je to grid alternativa k par()tradičního grafického systému:
> grid.rect(gp = gpar (col = "red", LWD = 2, fill = "yellow", lty = "dotted"))
> grid.text(label = "TEXT", gp = gpar (col = "red", fontsize = 10, fontface = "italic"))

Všechny tyto grafické objekty se nám vykreslili do grafického okna tradičního systému, které vždy představuje kořenový viewport (root).

Nakreslíme si teď obdélník se 45° otočením od základního viewportu. Nejdříve si otevřete nové grafické okno s pomocí funkce windows(), x11() nebo quartz() v závislosti na Vašem operačním systému.

> vp <- viewport(width = 0.5, height = 0.2, angle = 45, name = "VP") #nejdříve zadefinujeme viewport - jeho velikost a úhel zobrazení
> pushViewport (vp) #tímto příkazem ho vnoříme do stromu viewportů, kde se kreslí graf - tím pádem je ten samý viewport i aktivní
> grid.rect() #tento příkaz vykreslí do aktivního viewportu čtverec

přidáme osy
> grid.xaxis()
> grid.yaxis()


popisný text
> grid.text("viewport oblast", y = 0.9)

Teď se přemístíme o úroveň výš (do root viewportu):
> upViewport()

... a napíšeme text:

> grid.text("root oblast", y = 0.1)

Teď jsme sice v root viewportu, ale do našeho obdélníku můžeme přesto vložit text, a to s pomocí argumentu vp=, kde specifikujeme jméno obdélníkového viewportu:

> grid.text("další text", vp = "VP", y = 0.7)

Tímto příkazem zjistíme, že jsme opravdu stále v kořenovém viewportu:

> current.viewport()
viewport[ROOT]

Demonstrujme si teď editovatelnost grid grafiky.

Vytvoříme čtverec s názvem box:

> grid.rect(name="box", gp=gpar(lwd=20))

Přidáme černý kruh:
> grid.circle(r=0.25, gp=gpar(fill="black"))

Změníme pozadí čtverce na žluté:
> grid.edit("box", gp=gpar(fill="yellow"))

A čtverec odstraníme:
> grid.remove("box")

 

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