On 11-09-09 2:03 PM, Duncan Murdoch wrote:
On 09/09/2011 12:19 PM, Marius Hofert wrote:
Dear Duncan,

attached my next trial. It seems to work :-) Unfortunately, not the printing to pdf. Not 
getting a high-quality pdf is certainly one of the major drawbacks. If anybody knows how 
to fix that, please let me know. Even when generating the labels "by hand" 
(with grid), the code is less than setting up a nice lattice wireframe plot... so that 
makes rgl a great tool.

Two suggestions:

1. remember the par3d(ignoreExtent=FALSE) call to restore the default
behaviour, or you'll be unhappy when you draw your next plot.

2. Take a look at the mouseOneAxis mouse callback in
demo(mouseCallbacks).  It would make sense in your example to keep the z
axis always pointing up; that callback will do it.

And one todo item for me:  it appears that the sprites aren't being
recognized as partly transparent, so are being drawn in the wrong
order.  Got to fix that.

This is now fixed in version 0.92.829, just committed on R-forge. I will migrate the change to CRAN in due course.

Duncan Murdoch


Duncan Murdoch
Cheers,

Marius


require(rgl)
require(grid)

s<- seq(0, 1, length.out=21)
M<- function(u) apply(u, 1, min)
u<- s
v<- s
z<- outer(u, v, function(u,v) M(cbind(u,v)))

## create z-axis label
png("zlabel.png", bg="transparent", width=500, height=500)
grid.newpage()
pushViewport(plotViewport(c(1,1,1,1)))
print(grid.text(expression(W(u[1],u[2])==c), rot=90, gp=gpar(fontsize=85)))
popViewport()
dev.off()

## plot
persp3d(u, v, z, aspect="iso", front="line", lit=FALSE, axes=FALSE, xlab="",
          ylab="", zlab="")
axes3d(edges=c('x--','y--','z+-'))
par3d(ignoreExtent=TRUE)

sprites3d(1.4,-0.2,0.5, radius=0.5, lit=FALSE, textype="alpha", 
texture="zlabel.png")

sprites3d(1.4,-0.2,0.5, radius=0.5, lit=FALSE, textype="alpha", 
texture="zlabel.png")
par3d(windowRect=c(0,0,600,600), zoom=1.6)
rgl.snapshot("W.png", fmt="png") # print to file



On 2011-09-09, at 17:26 , Duncan Murdoch wrote:

  On 09/09/2011 11:10 AM, Marius Hofert wrote:
  Dear all,

  Below is some code where I try to get plotmath symbols in an rgl plot. Duncan
  Murdoch kindly suggested to use a "sprite" for this. As you can see, on can 
get
  it to work, but my knowledge about grid and rgl is too limited to perfectly
  solve the problem.
  1) As you can see (please rotate the plot a little bit so that (0,0,0) is "in 
front"),
  the quality of the .png seems poor. Can this be improved?

  Generally plotting much larger and shrinking is the way to do this.

  2) When I print the file to a .pdf, the label is just a black square... I 
assume
  one then has to print to png again... hmmm... not perfect.

  rgl.postscript has a lot of limitations.  This one may be unavoidable.
  3) Some parts of the z-axis are covered by the label. How can this be fixed?
  The problem seems to be that sprites have a radius. Specifying a rectangle 
would
  be better here, but I am not sure how this works (or even if it does).


  I think I don't see this in Windows, which shows the black text for the label 
on a transparent background.  Do you see a solid background?  Or is it just the 
positioning?  The tick marks go out at an angle, whereas your sprite seems to 
be in line with the zy plane.  I would increase the x value to something like 
1.4 to place it properly.  (Just tried that, and I think I see the problem you 
had:  the new sprite is obscured by the old one.
  You may need to play with the depth_test or depth_mask material properties.  
Not sure if those are visible on CRAN; if not, try the R-forge version.)

  The other thing I'd recommend is that before plotting the sprite, you run 
par3d(ignoreExtent=TRUE) (and then set it back to the original value 
afterwards).  This will stop the label from affecting the bounding box of the 
plot.

  Duncan Murdoch


  Cheers,

  Marius





  require(rgl)
  require(grid)

  s<- seq(0, 1, length.out=21)
  M<- function(u) apply(u, 1, min)
  u<- s
  v<- s
  z<- outer(u, v, function(u,v) M(cbind(u,v)))

  ## create z-axis label
  png("zlabel.png", bg="transparent", width=70, height=70)
  grid.newpage()
  pushViewport(plotViewport(c(1,1,1,1)))
  print(grid.text(expression(W(u[1],u[2])==c),rot=90))
  popViewport()
  dev.off()

  ## plot
  persp3d(u, v, z, aspect="iso", front="line", lit=FALSE, axes=FALSE, xlab="",
          ylab="", zlab="")
  axes3d(edges=c('x--','y--','z+-'))
  sprites3d(1,-0.4,0.65, radius=0.5, lit=FALSE, textype="alpha", 
texture="zlabel.png")
  rgl.postscript("W.pdf", fmt="pdf") # print to file

  # par3d(c("userMatrix", "zoom", "FOV")):
  #
  # $userMatrix
  #            [,1]       [,2]       [,3] [,4]
  # [1,]  0.7262191 -0.6867201 0.03195775    0
  # [2,]  0.2750087  0.3328032 0.90200466    0
  # [3,] -0.6300603 -0.6462642 0.43054202    0
  # [4,]  0.0000000  0.0000000 0.00000000    1
  #
  # $zoom
  # [1] 1
  #
  # $FOV
  # [1] 30








______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to