Skip to content

Print plot to pdf, jpg or any other format when using scatter3d error

6 messages · David Winsemius, Uwe Ligges, Jurica Seva +1 more

#
Hi,

I have been trying to output my graphs to a file (jpeg, pdf, ps, it 
doesnt matter) but i cant seem to be able to get it to output. I tried a 
few things but none of them worked and am lost as what to do now. I am 
using the scatter3d function, and it prints out the graphs on tot he 
screen without any problems, but when it comes to writing them to a file 
i cant make it work. Is there any other way of producing 3dimensional 
graphs (they dont have to be rotatable/interactive after the print out)?

The code is fairly simple and is listed down :

#libraries
library(RMySQL)
library(rgl)
library(scatterplot3d)
library(Rcmdr)

##############################################################################
#database connection
mycon <- dbConnect(MySQL(), 
user='root',dbname='test',host='localhost',password='')
#distinct sessions
rsSessionsU01 <- dbSendQuery(mycon, "select distinct sessionID from 
actiontimes where userID = 'ID01'")
sessionU01 <-fetch(rsSessionsU01)
sessionU01[2,]

#user01 data
mycon <- dbConnect(MySQL(), 
user='root',dbname='test',host='localhost',password='')
rsUser01 <- dbSendQuery(mycon, "select 
a.userID,a.sessionID,a.actionTaken,a.timelineMSEC,a.durationMSEC,b.X,b.Y,b.Rel__dist_,b.Total_dist_ 
from `actiontimes` as a , `ulogdata` as b where a.originalRECNO = 
b.RECNO and a.userID='ID01'")
user01 <- fetch(rsUser01, n= -1)
user01[1,1]

#plot loop

for (i in 1:10){

     userSubset<-subset(user01,sessionID == 
sessionU01[i,],select=c(timelineMSEC,X,Y))
     userSubset
     x<-as.numeric(userSubset$X)
     y<-as.numeric(userSubset$Y)
     scatter3d(x,y,userSubset$timeline,xlim = c(0,1280), ylim = 
c(0,1024), 
zlim=c(0,1800000),type="h",main=sessionU01[i,],sub=sessionU01[i,])
     tmp6=rep(".ps")
     tmp7=paste(sessionU01[i,],tmp6,sep="")
     tmp7
     rgl.postscript(tmp7,"ps",drawText=FALSE)
     #pdf(file=tmp7)
     #dev.print(file=tmp7, device=pdf, width=600)
     #dev.off(2)
}
#
On Jan 3, 2011, at 8:17 PM, Jurica Seva wrote:

            
#???  I thought the function was scatterplot3d()
Why name it ".ps" when you are using pdf.dev()?
When you want to get output to the file device, you need to "surround"  
the plotting commands. the pdf call goes at the beginning of the loop  
and the dev.odd at the end. It seems dangerous to specify the number  
to dev.off since there might be no or more than one device already  
open. If you just use dev.off() you will close the last device that  
was opened,'
# you should also make sure you created a valid file string. We cannot  
check since you have not offered a reproducible example.
David Winsemius, MD
West Hartford, CT
#
On 04.01.2011 08:37, David Winsemius wrote:
scatter3d() is provided by Rcmdr and an interface to the rgl package.
Actually he is not using it (at least it is in comments).
That should be correct code, according to the rgl documentation.
Using R standard devices will not work for rgl graphics.

Best wishes,
Uwe
#
On 03/01/2011 8:17 PM, Jurica Seva wrote:
As Uwe said, you are using rgl graphics, not base graphics.  So none of 
the standard devices work, you need to use the tools built into rgl.  
Attach that package, and then read ?rgl.postscript (for graphics in 
various vector formats, not just Postscript) and ?rgl.snapshot (for 
bitmapped graphics).

Some notes:
  - For a while rgl.snapshot wasn't working in the Windows builds with R 
2.12.1; that is now fixed, so you should update rgl before getting 
frustrated.
  - rgl.snapshot just takes a copy of the graphics buffer that is 
showing on screen, so it is limited to the size you can display
  - rgl.postscript does a better job for the parts of an image that it 
can handle, but it is not a perfect OpenGL emulator, so it doesn't 
always include all components of a graph properly.

Duncan Murdoch
#
On 11-01-04 5:36 PM, Jurica Seva wrote:
Sure, they're the size of the window:  it's just a snapshot.  Just make 
it bigger (by mouse, or using par3d(windowRect= ...)) before taking the 
snapshot.

Duncan Murdoch