[R-sig-eco] ordiplot questions
Gavin Simpson
gavin.simpson at ucl.ac.uk
Thu Jul 21 11:01:23 CEST 2011
On Wed, 2011-07-20 at 20:54 -0400, Chris Habeck wrote:
> Hi,
>
> I have two questions regarding the use of ordiplot{vegan} and envfit{vegan}.
> Hopefully someone can help.
Your 1st question isn't very clear, perhaps because the example you give
is not reproducible and the figure you attached hasn't made it through
the mailing list filters.
> First question: I am trying to maximize the space used to project my sites
> onto a graph of NMDS results by defining the xlim and ylim, but the axes
> default to separate tick intervals (see attached figure). How do I get the
> intervals to behave?
What do you mean by "behave"? ylim and xlim do not set the tick
intervals, they just set the limits of the plotting region (well almost,
R adds a small fudge amount of 4% IIRC and then finds pretty tick
locations within the range) in data coordinates. If you mean that the
tick interval on both axes is different, as in:
## from ?metaMDS
data(dune)
library(MASS) ## isoMDS
sol <- metaMDS(dune)
ordiplot(sol, type="t", display = "sites", ylim = c(-0.7,0.7),
xlim = c(-0.7,0.7))
then you need make the plotting region square - the axes are in the same
unit scale so it is the relative length of the axes on the display that
is determining the placement of ticks.
Alternatively suppress the axes and draw the axes with ticks where you
want them:
ordiplot(sol, type="t", display = "sites", ylim = c(-0.7,0.7),
xlim = c(-0.7,0.7), xaxt = "n", yaxt = "n", bty = "n")
locs <- zapsmall(seq(-0.7, 0.7, by = 0.1))
axis(side = 1, at = locs)
axis(side = 2, at = locs)
box()
Automated plotting makes a number of assumptions about what the user
wants. If those aren't what is really desired then one must get ones
hands dirty and build the plot up themselves using standard R plotting
functions.
> Second question: I would like to display the vector lines from my envfit
> object, but not the variable labels. Is this possible?
Yes, same advice as above, draw them yourself:
## continuing from above
data(dune.env)
vf <- envfit(sol ~ A1, data = dune.env)
The end-points of the arrows are stored in $vectors$arrows of the
returned object, so we can use the standard R function `arrows()` to
plot them:
ends <- vf$vectors$arrows
ends <- ends * ordiArrowMul(ends, c(0,0))
arrows(0, 0, ends[1], ends[2], length = 0.1, col = "blue")
I use the helper function ordiArrowMul() to work out the correct
multiplier to scale the unit length arrow appropriately for the plot.
> Below is the associated code used to produce the attached figure.
>
> library(vegan)
> rem.mds = metaMDS(rem.spp)
> rem.ef <- envfit(rem.mds,
> rem.env[,c(2,3,4,5,7,8,10:12,15:18,20,21,22,24,28)],na.rm = TRUE, permu =
> 999)
> rem.ef
Not reproducible as we don't have your data. Try to supply a proper
reproducible example in the future by giving us your data, or, *better*
do as I did and take one of the provided example data sets and base your
example on that.
HTH
G
>
> rem.plot = ordiplot(rem.mds, type = "none", display = "sites", xlim =
> c(-0.7,0.7), ylim = c(-0.7,0.7))
> points(rem.plot, "sites", pch=21, cex = 2, col="black", bg="white")
> plot(rem.ef, p.max = 0.05, col = "red", cex = 1.2)
>
>
>
> ****************************************
> Chris Habeck
> Remnant Expansion Project
> Postdoctoral Research Associate
> Department of Biology
> Washington University at St. Louis
> _______________________________________________
> R-sig-ecology mailing list
> R-sig-ecology at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-ecology
--
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
Dr. Gavin Simpson [t] +44 (0)20 7679 0522
ECRC, UCL Geography, [f] +44 (0)20 7679 0565
Pearson Building, [e] gavin.simpsonATNOSPAMucl.ac.uk
Gower Street, London [w] http://www.ucl.ac.uk/~ucfagls/
UK. WC1E 6BT. [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
More information about the R-sig-ecology
mailing list