User Tools

Site Tools


cs:indirect_ordination_viz

Česká verze stránek není od roku 2013 aktualizována. Aktuální verzi této stránky najdete v její anglické verzi zde.

Ordinační diagramy

Následující kreslící funkce používají výsledků DCA, vypočteného na datech z údolí Vltavy:

veg.data <- read.delim ('http://www.davidzeleny.net/anadat-r/data-download/vltava-spe.txt', row.names = 1)
env.data <- read.delim ('http://www.davidzeleny.net/anadat-r/data-download/vltava-env.txt')
 
library (vegan)
DCA <- decorana (veg = veg.data)

ordiplot (library vegan)

ordiplot (DCA, display = 'sites', type = 'p')

ordiplot (DCA, display = 'species', type = 't')

orditorp (library vegan)

Jednou z možností, jak dokreslit do ordinačního diagramu popisky tak, aby se daly alespoň některé přečíst, je vykreslit jen některé a ostatní nahradit nějakým symbolem. Nejdříve je třeba vytvořit prázdný ordinační diagram, v tomto případě nachystaný na vykreslení druhů (argument type = 'n' zajistí, že se do diagramu nenakreslí ani body, ani text):

ordiplot (DCA, display = 'sp', type = 'n')

a nyní dokreslíme vlastní popisky:

orditorp (DCA, display = 'sp')

ordilabel (library vegan)

Další možností je dokreslit popisky tzv. nálepkovou metodou:

ordiplot (DCA, display = 'sp', type = 'n')
ordilabel (DCA, display = 'sp')

Další možnosti: identify.ordiplot, která umožňuje přiřadit popisky k bodům na které v obrázku klikneme myší, a orditkplot, která vytváří víceméně interaktivní obrázky (zatím ale nevypadají nic moc). Jejich uložení v grafickém formátu moc nefunguje, ale je možné použít tlačítko “Dump to R”, uložit obrázek jako objekt R pod nějakým názvem (např. fig1) a pak ho nakreslit pomocí funkce plot (fig1).

points (library vegan)

Funkce points umožňuje dokreslovat do ordinačního diagramu body pro jednotlivé vzorky nebo druhy, a flexibilně měnit vlastnosti těchto bodů (barvu, tvar, velikost). Následující příklady používají klasifikaci vegetačních snímků pomocí numerické klasifikace (Wardova metoda na euklidovských distancích) do čtyř skupin, která je uložená v datovém rámci env.data v proměnné GROUP.

Nakreslíme prázdný ordinační diagram, naškálovaný na kreslení vzorků, a do něj dokreslíme jednotlivé body - pro každou skupinu zvolíme jinou barvu a jiný symbol:

ordiplot (DCA, display = 'si', type = 'n')
points (DCA, col = env.data$GROUP, pch = env.data$GROUP )

ordispider a ordihull (library vegan)

Dokresluje obálky kolem skupin bodů (ordihull) nebo tzv. pavučiny, které spojují body z jednotlivých skupin s centroidem skupiny (ordispider). Argument label = T umožňuje kreslení popisků do středu pavouka:

ordiplot (DCA, display = 'si', type = 'n')
for (i in seq (1, 4)) ordispider (DCA, groups = env.data$GROUP, show.groups = i, col = i, label = T)

for (i in seq (1, 5)) ordihull (DCA, groups = klas, show.groups = i, col = i, lty = 'dotted')

ordirgl (library vegan)

ordirgl (DCA)

orglspider (library vegan)

orglspider (DCA, groups = env.data$GROUP)

orglhull (není v knihovně vegan, autor: D. Zelený)

Tato funkce vyžaduje knihovnu geometry, kterou můžete nainstalovat následovně:

install.packages ('geometry')

Následuje moje definice funkce (před jejím použitím je třeba funkci nadefinovat - překopírujte obsah následujícího okna do příkazového řádku eRka):

orglhull <- function (object, groups, display = 'sites', choices = 1:3, show.groups = NULL,  ...)
{
require (geometry, quietly = T)
require (rgl)
pts <- scores (object, choices = choices, display = display, ...)
if (!is.null(show.groups))
{take <- groups %in% show.groups
  pts <- pts[take, , drop = FALSE]
  groups <- groups[take]}
out <- seq (along = groups)
inds <- names (table (groups))
for (is in inds)
  {
  gr <- out[groups == is]
  if (length (gr) == 2)
    {
    X <- pts[gr,]
    rgl.lines (X[,1], X[,2], X[,3], lwd = 2, ...)
    }
 
  if (length (gr) == 3)
    {
    X <- pts[gr,]
    rgl.triangles (X[,1], X[,2], X[,3], ...)  
    }
  if (length (gr) > 3)
    {
    X <- pts[gr,]
    # check if the points are not situated in hyperplane
      bas.matrix <- X[1:3,]
      D <- det (bas.matrix)
      d <- 1
      bas.matrix.a <- bas.matrix
      bas.matrix.a[,1] <- 1
      a <- -d/D*det (bas.matrix.a)
 
      bas.matrix.b <- bas.matrix
      bas.matrix.b[,2] <- 1
      b <- -d/D*det (bas.matrix.b)
 
      bas.matrix.c <- bas.matrix
      bas.matrix.c[,3] <- 1
      c <- -d/D*det (bas.matrix.c)
      kolik <- a*X[,1]+b*X[,2]+c*X[,3] + d      
      save (X, file = 'X.r')
      if (all (abs (kolik) <=  1e-10)) X <- X + runif (length (X), min = -1e-5, max = 1e-5)
 
    tr <-  t (convhulln (X,"FA")$hull)
    print (tr)
    rgl.triangles (X[tr,1], X[tr,2], X[tr,3], ...)
    }
   }
   invisible ()
}

A takto je možné funkci použít:

orglhull (DCA, groups = env.data$GROUP)

cs/indirect_ordination_viz.txt · Last modified: 2017/10/11 20:36 (external edit)