[R] Adding points to a wireframe with conditioning variable

Mark Lyman mark.lyman at gmail.com
Thu Jul 5 21:40:50 CEST 2007

Deepayan Sarkar <deepayan.sarkar <at> gmail.com> writes:

> On 7/5/07, Mark Lyman <mark.lyman <at> gmail.com> wrote:
> > I would like to add points to a wireframe but with a conditioning 
variable. I
> > found a solution for this without a conditioning variable here,
> > http://finzi.psych.upenn.edu/R/Rhelp02a/archive/65321.html. Does anyone 
> > how to plot a wireframe conditioned on a variable and add the points
> > conditioned on the same variable, similar to the solution at the link 
> Depends on what form you have your points in. Inside a panel function,
> packet.number() will give you the packet number in sequential order
> (column major order if you think of the conditioning variables as
> defining a multiway cross-tabulation), and which.packet() will give
> you a vector with the current level of each conditioning variable. You
> can use these to extract the appropriate subset of points.
> -Deepayan

Thank you Deepayan. I modified the panel function you wrote in the post 
referenced above according to your suggestion. Here is the panel function, I 
came up with

panel.3dwire.points <- function(x, y, z, xlim, ylim, zlim, xlim.scaled,
	ylim.scaled, zlim.scaled, pts, ...)
	panel.3dwire(x=x, y=y, z=z, xlim=xlim, ylim=ylim, zlim=zlim,
		xlim.scaled=xlim.scaled, ylim.scaled=ylim.scaled,
		zlim.scaled=zlim.scaled, ...)
	pts.sub <- subset(pts, g==levels(g)[which.packet()])
	xx <- xlim.scaled[1] + diff(xlim.scaled)*(pts.sub$x - xlim[1])/diff
	yy <- ylim.scaled[1] + diff(ylim.scaled)*(pts.sub$y - ylim[1])/diff
	zz <- zlim.scaled[1] + diff(zlim.scaled)*(pts.sub$z - zlim[1])/diff
	panel.3dscatter(x=xx, y=yy, z=zz, xlim=xlim, ylim=ylim, zlim=zlim,
		xlim.scaled=xlim.scaled, ylim.scaled=ylim.scaled,
		zlim.scaled=zlim.scaled, ...)

where pts is a dataframe with the three dimensional points (x,y,z) and the 
conditioning variable g.


More information about the R-help mailing list