Nathan S. Watson-Haigh wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I'd like to be able to colour histograms along the diagonal using the colours
stored in colnames(d):

d
         black        blue        brown        cyan
1   0.96405751 -0.02964390 -0.060147424 -0.06460070
2  -0.03614607  0.95475444 -0.152382053 -0.07767974
3  -0.07095613 -0.05884884 -0.061289399 -0.06445973
4  -0.03708223 -0.05997624 -0.054044275 -0.08291373
5  -0.08877190 -0.07193658 -0.078598617 -0.08892916
6  -0.09294377 -0.05563854 -0.051405213 -0.08442332
7  -0.08431200 -0.01657793 -0.119773022 -0.07364633
8  -0.06105875 -0.05311773 -0.062928495 -0.06982507
9  -0.05757523 -0.02589045 -0.102312333 -0.05616588
10 -0.05092343 -0.03935830 -0.062069716 -0.05402492
11 -0.08057353 -0.12690058 -0.004248301 -0.06850326
12 -0.08052613 -0.04962747 -0.098955086 -0.06496541
13 -0.07901151 -0.07587651 -0.077401999  0.96525294
14 -0.07187448 -0.15431262  0.952982852 -0.06471004
15 -0.07230232 -0.13704876  0.032573081 -0.05040565



So I'd like the top-left histogram on the diagonal to be coloured black, then
the next one on the diagonal to be coloured blue etc. Is this possible?

Normally information about what is being plotted isn't passed to the panel function, and attributes of the columns are stripped off before passing, so this isn't easy.

If you want to do some ugly programming, you can look up the variable i in the sys.frame(2) environment; that will be the column number. While you're at it, you might as well get the data too: it's called x there. For example,

d <- data.frame(black=rnorm(100), blue=rnorm(100), brown=rnorm(100), cyan=rnorm(100))

panel.hist <- function(x, ...) {
   # get some graphical parameter settings, and reset them on exit
   usr <- par("usr")
   on.exit(par(usr))
par(usr = c(usr[1:2], 0, 1.5) ) # get a histogram of the data, but don't plot it - we just need to get some info from the histogram
   h <- hist(x, plot = FALSE)
   breaks <- h$breaks
   nB <- length(breaks)
   y <- h$counts; y <- y/max(y)

colnum <- parent.frame(2)$i x <- parent.frame(2)$x colour <- colnames(x)[colnum] rect(breaks[-nB], 0, breaks[-1], y, col=colour, ...)
}

pairs(d, upper.panel=panel.smooth, diag.panel=panel.hist)

Duncan Murdoch

Cheers,
Nathan

- --
- --------------------------------------------------------
Dr. Nathan S. Watson-Haigh
OCE Post Doctoral Fellow
CSIRO Livestock Industries
Queensland Bioscience Precinct
St Lucia, QLD 4067
Australia

Tel: +61 (0)7 3214 2922
Fax: +61 (0)7 3214 2900
Web: http://www.csiro.au/people/Nathan.Watson-Haigh.html
- --------------------------------------------------------

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkmHovYACgkQ9gTv6QYzVL5bUgCgw3EHQKS9WjO2AmtEks6x0Bh9
FLgAoIFpikJ903quFBaxQe5UVXAAbrnq
=XRan
-----END PGP SIGNATURE-----

______________________________________________
R-help@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.


______________________________________________
R-help@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.

Reply via email to