plot3d - иметь два сюжета сразу

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

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

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


person CodeGuy    schedule 05.02.2013    source источник
comment
добавил тег rgl, так как я предполагаю, что это то место, откуда исходит функция   -  person user1317221_G    schedule 05.02.2013


Ответы (3)


как это:

 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 перед вторым графиком, чтобы открыть новое "устройство".

person user1317221_G    schedule 05.02.2013

Вы можете обнаружить, что второе окно построения 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, если вы установите add=TRUE.

person IRTFM    schedule 05.02.2013

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

Следующий адаптированный код (из здесь) создает два параллельных трехмерных графика (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))
person Marcus    schedule 11.01.2019