Question

plot3d() produces a 3d plot that I can twist around and rotate. But when I call plot3d() again, the previous plot goes away and is replaced by this one.

How can I make it so that a new XQuartz window opens up rather than the old window being replaced by the new 3d plot.

Essentially, I want two 3d plots opened at once.

Was it helpful?

Solution

like this:

 library(rgl)

 open3d()
 x <- sort(rnorm(1000))
 y <- rnorm(1000)
 z <- rnorm(1000) + atan2(x,y)
 plot3d(x, y, z, col=rainbow(1000))

 open3d()
 x <- sort(rnorm(20))
 y <- rnorm(20)
 z <- rnorm(20) + atan2(x,y)
 plot3d(x, y, z, col=rainbow(20))

The key here is calling open3d before the second plot to open a new "device"

OTHER TIPS

You might discover that the 2nd rgl plotting window has simply been placed exactly on top of the earlier window. If you move the second window you will see the first one is still there (although not now having "Focus" status.) There is no need to plot to the devices in order to keep them available. You change the window that gets the focus with rgl.set:

> open3d()
[1] 3     # might have been "1"
> open3d()
[1] 4    # Now move that 2nd  window to the side 
> rgl.set(3)
#Focus is returned to the first window.

You cannot have 2 windows active (in the sense of getting commands) at once, but you can have them both visible, and if one was set spinning it would continue to spin after focus were shifted to the other window. You can also add to an existing plot with the plot3d function if you set add=TRUE.

An alternative to have "two 3d plots opened at once" is using mfrow3d from library("rgl"). It works the same way as par("mfrow") in classic R.

The following adapted code (from here) produces two side-by-side 3D plots (2 columns) in one window:

library(rgl)

mfrow3d(1, 2)
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
plot3d(x, y, z, col=rainbow(1000))

x <- sort(rnorm(20))
y <- rnorm(20)
z <- rnorm(20) + atan2(x,y)
plot3d(x, y, z, col=rainbow(20))
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top