On Friday 07 May 2004 16:07, [EMAIL PROTECTED] wrote: > Hi R-helpers > > I would like to plot some planes which are perpendicular to the x-y > plane, such as x=y. Is there a way to do this in wireframe? I > realize that I am not plotting a function of x, y since there are > infinite number of z's that satisfy the above relation.... Hmm...
Well, from R 1.9.0 onwards wireframe can draw arbitrary 3-D parametric surfaces (spheres and such) with a formula of the form z ~ x * y where x, y and z are all matrices. A plane is a very trivial application of this, e.g.: x <- matrix(rep(1:10, 10), 10) y <- x z <- matrix(rep(1:10, each = 10), 10) wireframe(z ~ x * y) Of course, you are probably not interested in only this plane, in which case things may not be as easy, since (1) formally there's no way to specify multiple surfaces with this usage and (2) wireframe doesn't do hidden surface removal, so intersecting surfaces are messed up. But in many cases you can probably make do with a fine mesh and some innovative use of NA's. e.g. (continuing the earlier example): xx <- cbind(x, NA, x) yy <- cbind(y+50, NA, y^2) zz <- cbind(z, NA, z) wireframe(zz ~ xx * yy) > Somewhat related, I would also like to plot a line in 3 d space... That's also easy, e.g. cloud(1:3 ~ 3:1 * 1:3) (there seems to be bug with just 2 points, I'll fix that in the next release). To do this in a wireframe plot you would probably use the panel function panel.3dscatter. What's not easy, however, when you are combining planes and lines, is to make sure that the appropriate parts of the line are hidden. > Finally, if you are feeling really brave, I am interested in doing > all of this based on sums generating vectors (I know there is a > linear algebra term for this) -- ie generate the plane based on > c_1*v_1 + c_2*v_2 for c_1 and c_2 in reals. You mean the span of v_1 and v_2 ? Very easy with the approach outlined above. Visualize a rectangular grid on the c_1-c_2 plane determining the ranges of c_1 and c_2. Let's say the ranges are c1 and c2, e.g., c1 = c2 = seq(0, 1, length = 11). Next, evaluate the values of c1 and c2 on this grid as matrices: tmp = expand.grid(c1 = c1, c2 = c2) mc1 = matrix(tmp$c1, length(c1)) mc2 = matrix(tmp$c2, length(c1)) Next evaluate the corresponding points on your plane: x = v1[1] * mc1 + v2[1] * mc2 y = v1[2] * mc1 + v2[2] * mc2 z = v1[3] * mc1 + v2[3] * mc2 and plot them wireframe(z ~ x * y) If you don't like the distortion, you could use a wide range of c1 and c2 and then use appropriate x/y/zlim. Deepayan ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
