[R] pairs() help - colour histograms on diagonal
Duncan Murdoch
murdoch at stats.uwo.ca
Tue Feb 3 13:24:09 CET 2009
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 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.
>
More information about the R-help
mailing list