Re: [R] Vegan plotting- color help

From: Gavin Simpson <gavin.simpson_at_ucl.ac.uk>
Date: Fri, 11 Apr 2008 16:10:58 +0100

On Fri, 2008-04-11 at 10:43 -0400, stephen sefick wrote:
> that worked just fine. I missed the fact that the scores could be
> extracted- I am learning how to think like a programmer it is just
> taking time. Thank you very much for your help
>
> this is the code that I settled on:
>
> sol <- metaMDS(x, distance="jaccard")
>
> shrink <- FALSE ## see argument shrink in ?metaMDS
>
> ## get species and site scores
> spp.sc <- scores(sol, display = "species", shrink = shrink)
> site.sc <- scores(sol, display = "sites")
>
> ## work out the ranges
> ylim <- range(spp.sc[,2], site.sc[,2])
> xlim <- range(spp.sc[,1], site.sc[,1])
>
> ## set-up the plotting region
> plot(site.sc, xlim = xlim, ylim = ylim, type = "n", asp = 1,
> xlab = "NMDS1", ylab = "NMDS2")

You can do all the points() calls below in one go by specifying the vector of colours:

cols <- rep(c("red", "blue", "yellow", "green", "violet", "orange",

"darkred", "darkblue", "black", "bisque", "cyan", "azure", "chartreuse",
"khaki", "brown","aquamarine", "chocolate", "cornflowerblue",
"darkgoldenrod", "darkgreen", "darkolivegreen", "burlywood"), 
            times = c(22,23,18,22,21,21,21,24,23,23,....... etc))

then

points(site.sc, col = cols)

would have done that for you in a oner.

Also, note that 1:22 doesn't need to be wrapped in c( ). And, you'd save yourself some writing if you ask scores to return only axis one and two scores. Then you wouldn't need the ,c(1:2) bit either.

Easier in this instance would have been to use a grouping variable:

## dummy group ID
group <- sample(rep(1:3, each = 4))
## create dummy grouping factor
group <- factor(group, labels = paste("group", 1:3)) group

# vector of colours
cols <- c("red", "blue", "green")
## dummay data to plot
datx <- runif(12)
daty <- runif(12)

## plot it
plot(datx, daty, col = cols[group], pch = 16)

Notice how we index cols by group ( cols[group] ) in the above call to plot. group is stored as a sequence of 1's, 2's and 3's (in this case as we have 3 levels/groups). To see what R is seeing, try this:

> cols[group]

 [1] "green" "green" "red" "blue" "red" "red" "blue" "green" "red" [10] "blue" "green" "blue"

So you see that cols is expanded to the correct length according to what the level of 'group' is.

HTH G

> ## add the row
> points(site.sc[c(1:22),c(1:2)], col="red")
> points(site.sc[c(23:45),c(1:2)], col="blue")
> points(site.sc[c(46:63),c(1:2)], col="yellow")
> points(site.sc[c(64:85),c(1:2)], col="green")
> points(site.sc[c(86:106),c(1:2)], col="violet")
> points(site.sc[c(107:127),c(1:2)], col="orange")
> points(site.sc[c(128:148),c(1:2)], col="purple")
> points(site.sc[c(148:171),c(1:2)], col="darkred")
> points(site.sc[c(172:194),c(1:2)], col="darkblue")
> points(site.sc[c(195:217),c(1:2)], col="black")
> points(site.sc[c(218:233),c(1:2)], col="bisque")
> points(site.sc[c(234:256),c(1:2)], col="cyan")
> points(site.sc[c(257:262),c(1:2)], col="azure")
> points(site.sc[c(263:267),c(1:2)], col="chartreuse")
> points(site.sc[c(268:271),c(1:2)], col="khaki")
> points(site.sc[c(272:276),c(1:2)], col="brown")
> points(site.sc[c(277:279),c(1:2)], col="aquamarine")
> points(site.sc[c(279:286),c(1:2)], col="chocolate")
> points(site.sc[c(287:294),c(1:2)], col="cornflowerblue")
> points(site.sc[295,c(1:2)], col="coral")
> points(site.sc[c(296:299),c(1:2)], col="darkgoldenrod")
> points(site.sc[c(300:301),c(1:2)], col="darkgreen")
> points(site.sc[302,c(1:2)], col="darkolivegreen")
> points(site.sc[c(303:307),c(1:2)], col="burlywood")
> text(spp.sc, labels = colnames(x), cex = 0.8)
>
> On Fri, Apr 11, 2008 at 4:01 AM, Gavin Simpson <gavin.simpson_at_ucl.ac.uk> wrote:
> > On Thu, 2008-04-10 at 23:34 -0400, stephen sefick wrote:
> > > I have looked all over the internet for being able to color sites
> > > differently in a plot of an MDS (metaMDS)- I would like to color the
> > > different sites in the ordination plot (plot or ordiplot). I have set
> > > the matrix up so that my site code is 1 .... 296 (first column). is
> > > there a way to make 1-23 blue, 24-40 red etc.
> > > thanks
> > >
> > > Stephen
> > >
> >
> > This requires a bit of manipulation. Using the example from ?metaMDS
> >
> > data(dune)
> > require(MASS)
> > sol <- metaMDS(dune)
> >
> > shrink <- FALSE ## see argument shrink in ?metaMDS
> >
> > ## these are the plotting colours, must be a vector of the same
> > ## length (nrow) as the input data, here 20
> > cols <- rep(c("red","blue","green","black"), each = 5)
> >
> > ## get species and site scores
> > spp.sc <- scores(sol, display = "species", shrink = shrink)
> > site.sc <- scores(sol, display = "sites")
> >
> > ## work out the ranges
> > ylim <- range(spp.sc[,2], site.sc[,2])
> > xlim <- range(spp.sc[,1], site.sc[,1])
> >
> > ## set-up the plotting region
> > plot(site.sc, xlim = xlim, ylim = ylim, type = "n", asp = 1,
> > xlab = "NMDS1", ylab = "NMDS2")
> >
> > ## add the row
> > text(site.sc, col = cols, labels = rownames(dune), cex = 0.8)
> > text(spp.sc, labels = colnames(dune), cex = 0.8)
> >
> > is one way to do this,
> >
> > HTH
> >
> > G
> >
> > --
> > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
> > 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
> > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
> >
> >
>
>
>
> --
> Let's not spend our time and resources thinking about things that are
> so little or so large that all they really do for us is puff us up and
> make us feel like gods. We are mammals, and have not exhausted the
> annoying little problems of being mammals.
>
> -K. Mullis

-- 
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 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
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%

______________________________________________
R-help_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Received on Fri 11 Apr 2008 - 15:21:18 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 11 Apr 2008 - 18:30:27 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive