From murdoch.duncan at gmail.com  Thu Apr 21 02:56:36 2011
From: murdoch.duncan at gmail.com (Duncan Murdoch)
Date: Wed, 20 Apr 2011 20:56:36 -0400
Subject: [Rd] Sweave support added to rgl package
In-Reply-To: <BANLkTimjXGU+cEGnEsW_=vZ6E50Qby4JtA@mail.gmail.com>
References: <4DADD1E6.5040905@gmail.com>	<BANLkTikDrC1wdzMv+-0c1_t_MjTKx+Svxg@mail.gmail.com>	<4DAF2626.6010805@gmail.com>
	<BANLkTimjXGU+cEGnEsW_=vZ6E50Qby4JtA@mail.gmail.com>
Message-ID: <4DAF80C4.7070602@gmail.com>

On 20/04/2011 7:10 PM, Dominick Samperi wrote:
> On Wed, Apr 20, 2011 at 2:29 PM, Duncan Murdoch
> <murdoch.duncan at gmail.com>  wrote:
>> On 20/04/2011 1:52 PM, Dominick Samperi wrote:
>>>
>>> On Tue, Apr 19, 2011 at 2:18 PM, Duncan Murdoch
>>> <murdoch.duncan at gmail.com>    wrote:
>>>>   I have just committed some code to the rgl package on
>>>>   https://r-forge.r-project.org/projects/rgl/ to allow rgl images to be
>>>>   inserted into Sweave documents.  (This is not in the CRAN version yet.)
>>>>   It
>>>>   makes use of the custom graphics driver support added by Brian Ripley.
>>>>
>>>>   In R-devel (which will become R 2.14.0 next spring in New Zealand, next
>>>> fall
>>>>   in most other places), usage is quite straightforward.  For
>>>>   example, code like this in a Sweave document:
>>>>
>>>>   <<fig=true, grdevice=rgl.Sweave, pdf=false, stayopen=TRUE>>=
>>>>   x<- rnorm(100); y<- rnorm(100); z<- rnorm(100)
>>>>   plot3d(x, y, z)
>>>>   @
>>>>
>>>>   will insert a .png snapshot of the figure.  Because that chunk has
>>>>   "stayopen=TRUE", it can be followed by another chunk to add
>>>>   to the figure, e.g.
>>>>
>>>>   <<fig=true, grdevice=rgl.Sweave, pdf=false>>=
>>>>   lines3d(x[1:10], y[1:10], z[1:10], col="red")
>>>>   @
>>>>
>>>>   All of this is possible in R 2.13.0, but it takes more work:  see the
>>>>   ?rgl.Sweave help page.
>>>>
>>>>   I will eventually add postscript and PDF output options as well, and
>>>> perhaps
>>>>   some support for the LaTeX movie15 package, but those are not there
>>>> yet.
>>>>     Comments or bug reports are welcome.
>>>>
>>>>   Duncan Murdoch
>>>
>>> I inserted your example into testrgl.Rnw under R 2.13.0, with
>>> Sweave.snapshot()
>>> at the end of both chunks, but things did not work as expected.
>>>
>>> I used:
>>> $ R CMD Sweave testrgl.Rnw
>>> $ pdflatex tesetrgl
>>> (view testrgl.pdf)
>>>
>>> When R CMD Sweave is run the graphics is displayed interactively.
>>
>> That's unavoidable as far as I know.  I don't think there's a general
>> purpose way to tell OpenGL to render in the background, so it works by
>> rendering on screen, then copying a bitmap to the .png file.
>>>
>>> There is no graphics in the PDF file, even though both .png files
>>> are read when pdflatex is run.
>>
>> Do they look okay?  One possible problem is that you may have asked for a
>> bitmap too big for your hardware to render, in which case those png files
>> will end up with junk (probably blank).  Setting resolution=100 in the chunk
>> headers will do it more coarsely.  (The default is 300 dpi.)  The same
>> effect comes from width=1, height=1  (or some other small numbers).
>>
>> Duncan Murdoch
>>
>
> The resolution=100 tip fixed the problem, thanks.

I'll see if I am skipping over some error message in there.  It would be 
much better for Sweave to fail with an error than generate empty images.


 > Now I see the snapshots
> in the PDF file. Using this in a package will certainly change the
> user experience,
> but it moves away from the traditional batch-oriented R package
> processing, it seems to me.

I don't follow that.

> The idea of adding support for movies and 3D graphics to Sweave/PDF files
> sounds very interesting and revolutionary.

Movies will likely be pretty slow.  I think you'll want caching of some 
sort if you want to produce those.

Duncan Murdoch

>
> Dominick



[Rd] Sweave support added to rgl package
Duncan Murdoch