Seems like maybe a call is missing in grid.newpage?  But I think it should
be called multiple times for plot.lm - there are multiple plots there.

Hadley

On Monday, August 1, 2011, Jeroen Ooms <jeroen.ooms@stat.ucla.edu> wrote:
> Bumping this one up because the 'before.plot.new' solution turned out
> to be sub-optimal after all.
>
>>> It should be possible to do this with a before.plot.new hook, right?
>>
>> Yes, sure, if you treat the first and last plot separately.
>
> It turns out that the before.plot.new hook does not is not triggered
> at the right moments. I'm not sure if this is intended behavior or
> incorrect implementation. What I was expecting is a hook/event that is
> triggered every time before a new graphics frame is opened. E.g. if
> there is an open PDF device and some plots are printed, the number of
> times the hook is called should be exactly equal to the number of
> pages in the resulting PDF document. Sometimes this works as expected,
> sometimes it doesn't.
>
> At the end of this message some example code. In the first example,
> the hook works as expected is called 4 times, as there are 4 plots. In
> all the other examples the event is either triggered too often or not
> triggered at all. I guess the hook is called when the plot.new()
> function is explicitly called, which might not always happen.
>
> My question would be if (1) this is the intended behavior for
> 'before.plot.new', and (2) if yes, would it be possible to define an
> additional event that always triggers, and only triggers, if a
> completely new graphics device is opened. I.e. whenever a pdf device
> would start a new page.
>
> Thank you.
>
>
> #set the hook (event listener)
> setHook("before.plot.new", NULL);
> setHook("before.plot.new", function(){ message("Yay! A new plot!")});
>
> #works as expected:
> plot(lm(speed~dist, cars), ask=F);
>
> #triggered way too often, once for every partition of the plot
> plot(mtcars);
>
> #not triggered at all by lattice
> library(lattice);
> dotplot(speed~dist, cars);
>
> #not triggered at all by ggplot2
> library(ggplot2);
> qplot(speed, dist, data=cars);
>
>

-- 
Assistant Professor / Dobelman Family Junior Chair
Department of Statistics / Rice University
http://had.co.nz/

	[[alternative HTML version deleted]]

