[R] How to plot Ellipsoid like function

Uwe Wolfram uwwo at in-chemnitz.de
Tue Dec 14 14:45:45 CET 2010


Dear R-Users,

I am trying to plot an ellipsoid like function that represents some
physical threshold in its eigenvalue space. I am facing a few problems
generating a figure I need for my thesis. A small example looks as
follwos where the two contour3d plots do NOT overlay as desired so you
may try plotting the surfaces one by one to see what I mean.

====================================================================
# begin example

require(rgl)
require(misc3d)
require(MASS);

f <- function(x, y, z){
    chi0=-0.6603368
    eps0=0.006590395
    xi0=0.01117194
    (x^2 + y^2 + z^2 - chi0*(x*y + x*z + y*z))/eps0^2 + (x + y + z)/xi0
}
ff <- function(x, y, z)x + y + z

open3d()
clear3d("all")
bg3d(color="#887777")
light3d()

x <- seq(-.02,.02,len=20)

# plot ellipsoid
contour3d(f,1,x,x,x,color="#FF2222",alpha=0.5)

# plot plane
contour3d(ff,1,x,x,x,color="#FFCCCC",alpha=0.5)

# plot data points
spheres3d(c(-0.009379952, 0.007899338), c(-0.00879318, 0.00700924),
c(-0.009009740, 0.007656409),radius=0.0005,color="#CCCCFF")

# plot hydrostatic pressure line 
lines3d(c(-0.012, 0.012), c(-0.012, 0.012), c(-0.012, 0.012),
col="#A8A8A8", lwd=4)

# end example
====================================================================

I have three questions regarding this problem and I hope you could help
me.

     1. How can I overlay the plan plotted using contours3d(ff, ...) and
        the ellipsoid plotted with contours3d(f, ...)
     2. Instead of using spheres3d(...) I would love to use plot3d to
        obtain proper x, y and z coordinate axes. Is there a possibility
        to overly the contour3d() and line3d() commands with pot3d?
        Otherwise is there a possibility to plot proper coordinate axes
        with tics and such as usual R plots?
     3. How can I save the scene to an image? pdf(...) ... dev.off()
        seems not to work on my machine. I am using Ubuntu on a 32 Bit
        Laptop.

Thanks a  million for your help!

Uwe


Am Montag, den 13.12.2010, 10:20 -0500 schrieb Duncan Murdoch:
> On 13/12/2010 10:13 AM, Uwe Wolfram wrote:
> > 
> >
> > I am currently trying to fit a tensorial function in its principal
> > coorinate system. The function is given by:
> >
> > 1~(x1^2 + x2^2 + x3^2 - chi0*(x1*x2 + x1*x3 + x2*x3))/eps0^2 + (x1 + x2
> > + x3)/xi0
> >
> > Where eps0 = 0.0066, chi0 = -0.66 and xi0 = 0.011 are obtained from
> > experimental data using nls().I am able to plot the experimental points
> > that delivered the parameters of the function. For my thesis, however, I
> > need to overlay the fitted surface. So far I am using the following code
> > which wonderfully plots the experimental points in 3D:
> >
> > ===================================================================
> > # from demo(bivar)
> > require(rgl)
> > require(misc3d)
> > require(MASS);
> >
> > # New window
> > open3d()
> > # clear scene:
> > clear3d("all")
> > # setup env. That is, background, light and so on:
> > bg3d(color="#887777")
> > light3d()
> > # spheres at points in principal strain space
> > #spheres3d(e1,e2,e3,radius=0.00025,color="#CCCCFF")
> > # draws points alternatively
> > plot3d(e1,e2,e3, col="#CCCCFF")
> > ===================================================================
> >
> > According to the examples on http://rgl.neoscientists.org/gallery.shtml
> > I tried to overlay the point plot using surface3d. However, these were
> > only functions of type y ~f(x1, x2). I think that the surface could be
> > plotted if I could provide the gridpoints correctly. Using
> > xyz.coords(1~(x1^2 + x2^2 + x3^2 - chi0*(x1*x2 + x1*x3 + x2*x3))/eps0^2
> > + (x1 + x2 + x3)/xi0, y = NULL, z = NULL) did unfortunately not solve
> > the problem.
> >
> > Is there any function that can generate the surface for the given
> > function such as ContourPlot3D in Mathematica.
> 
> See ?misc3d::contour3d
>



More information about the R-help mailing list