[R] Plotting with Statistics::R, Perl/R

Dirk Eddelbuettel edd at debian.org
Sat Jan 22 03:19:45 CET 2005


On Fri, Jan 21, 2005 at 06:06:45PM -0800, Leah Barrera wrote:
> I am trying to plot in R from a perl script using the Statistics::R
> package as my bridge.  The following are the conditions:
> 
> 0. I am running from a Linux server.
> 
> 1. Even without xwindows the following saves test.png correctly from an
> interactive session with R:
> > xy<-cbind(1,1)
> > png("test.png")
> > plot(xy)
> > dev.off()
> 
> 2. However, when called from the perl script I get the ff. warning:
> --
> X11 module is not available under this GUI
> --
> and nothing is saved
> 
> 3. I tried to hijack the script by modifying
> lib/Statistics/R/Bridge/Linux.pm to remove the
> "gui=none" setting
> --
> $this->{START_CMD} = "$this->{R_BIN} --slave --vanilla --gui=none" ;
> --
> changed to
> --
> $this->{START_CMD} = "$this->{R_BIN} --slave --vanilla" ;
> --
> 
> 4.  When plotting in R from the perl script again, I no longer get the
> warning and  I get test.png saved, but it is empty.
> 
> Please advise.

It's a FAQ.  

Plotting certain formats requires the X11 server to be present as the font
metrics for those formats can be supplied only the X11 server. Other drivers
don;t the font metrics from X11 -- I think pdf is a good counterexample.
When you run in 'batch' via a Perl script, you don't have the X11 server --
even though it may be on the machine and running, it is not associated with
the particular session running your Perl job.  There are two common fixes:

a) if you must have png() as a format, you can start a virtual X11 server
   with the xvfb server -- this is a bit involved, but doable;
   
b) if you can do other formats instead of png(), this can work -- I have
   forgotten the details but the story has been discussed many times over
   here as web servers use the same "session-less" setup.  In essence,
   using ghostscript for the bitmap conversion works so it may be that
   the bitmap() device works.  If I recall pdf(), works.  
   
c) With that, you could try creating a pdf() first, and then use Perl to
   call ghostscript to convert the pdf for you.  R can do that too for
   you, but only for certain devices.  
   
Hth,  Dirk   

-- 
Better to have an approximate answer to the right question than a precise 
answer to the wrong question.  --  John Tukey as quoted by John Chambers




More information about the R-help mailing list