[R] Zoo panel function

Gabor Grothendieck ggrothendieck at gmail.com
Wed Aug 1 13:31:44 CEST 2012


On Wed, Aug 1, 2012 at 12:40 AM, Gene Leynes <gleynes at gmail.com> wrote:
> Achim,
>
> Thank you for your response, and for your work on the zoo package in
> general.  Also, that implementation of the color scheme looks great.
>
> Frankly, I can't remember exactly what I was originally trying to
> accomplish for this particular problem, but I think that your suggestion of
> reviewing the plotting section of the zoo vignette would solve the problem.
>  Calculating the colors ahead of time and passing them in as a list is
> great solution that I didn't know was possible.
>
> I still have some lingering questions about the panel function, which has
> been one of those things in R that I would like to understand better.
>
> Using your example, I would like to be able to pass in an additional
> variable to make each set of hues like this:
>
> mycol <- function(i, v)  hcl(
>   h = ifelse(i > 0, v, 0),
>   c = 80 * abs(i)^1.5,
>   l = 90 - 60 * abs(i)^1.5)
>
> mypanel <- function(x, y, v, ...) {
>   lines(x, y, col = "gray")
>   points(x, y, col = mycol(y / max(abs(y)), v), pch = 19)
> }
> plot(zobj, panel = mypanel, v=0)
> plot(zobj, panel = mypanel, v=50)
> plot(zobj, panel = mypanel, v=100)
> plot(zobj, panel = mypanel, v=150)
>
>
> This runs, but generates warnings. I was trying to find the right way to
> pass additional arguments to panel.
>
> I was trying things like this:
> plot(zobj, panel = mypanel(x, y, v=150))
> plot(zobj, panel = mypanel(..., v=150))
>
>
> I was surprised at how many ways I could call panel, but how unpredictable
> (to me) the results were!  Things that I didn't think would work were ok,
> and other things that seemed correct would threw errors.
>
> If you have some insight I would like to hear it, but this isn't that
> important because there are obviously other approaches for making the same
> / similar output.
>

As documented in ?plot.zoo the ... argument consists of graphical
parameters so its not just passed to the panel function -- you can
expect warnings if, as here, the parameters are not graphical (as they
are passed to other functions and not just the panel function).

What you can do is to create a panel constructor that uses lexical
scoping to encapsulate the additional parameters:

make.mypanel <- function(v) function(...) mypanel(..., v)
plot(zobj, panel = make.mypanel(v=0) )

Here make.mypanel constructs a mypanel function with the v argument
filled in so you don't have to separately pass it via ... .

-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-help mailing list