plot3D - having two plots at once

2019-04-23 07:29发布

问题:

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.

回答1:

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"



回答2:

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 widow that get s 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 commnds) 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.



回答3:

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))


标签: r plot rgl