Подтвердить что ты не робот

plot3D - сразу два графика

plot3d() создает 3D-график, который я могу крутить и вращать. Но когда я снова вызываю plot3d(), предыдущий сюжет уходит и заменяется этим.

Как я могу сделать так, чтобы открылось новое окно XQuartz вместо старого окна, которое заменяется новым трехмерным графиком.

По сути, я хочу сразу открыть два 3d-графика.

4b9b3361

Ответ 1

как это:

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

Ключ здесь вызывает open3d перед вторым open3d чтобы открыть новое "устройство",

Ответ 2

Возможно, вы обнаружите, что 2-е окно графика rgl было просто размещено точно поверх предыдущего окна. Если вы переместите второе окно, то увидите, что первое окно все еще там (хотя сейчас оно не имеет статуса "Фокус"). Нет необходимости прокладывать графики для устройств, чтобы они оставались доступными. Вы меняете окно, которое получает фокус, с помощью 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.

Вы не можете иметь 2 активных окна (в смысле получения команд) одновременно, но вы можете сделать их оба видимыми, и если бы было установлено одно вращение, оно продолжало бы вращаться после смещения фокуса на другое окно. Вы также можете добавить к существующему plot3d с plot3d функции plot3d если вы установите add=TRUE.

Ответ 3

Альтернатива "открывать два 3d графика одновременно" - использовать mfrow3d из library("rgl"). Он работает так же, как par("mfrow") в классическом R.

Следующий адаптированный код (отсюда) создает два параллельных 3D-графика (2 столбца) в одном окне:

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