Как добавить в устройство rgl несколько подмножеств данных в виде сфер или точек? add = T не работает - PullRequest
0 голосов
/ 06 января 2019

Мне нужна помощь с моими сферами rgl. У меня есть код ниже, и добавление набора данных в виде сфер внутри устройства rgl работает (для всего набора данных) в 3D. Я только создал подмножества этих данных и хотел нарисовать их разными цветами, и даже настроить их, чтобы добавить в подмножество эллипс.

Как обычно на «нормальных» R-графиках в 2D, я просто открываю график как

plot(x,y, col="red", cex=1, ...) с помощью команды "points" я добавляю каждое подмножество ниже начального графика. Та же структура, которую я хотел использовать для устройства rgl, но даже внутри rgl.spheres(....add=T) не работает. У кого-нибудь есть идея преодолеть это? С уважением и заранее большое спасибо за помощь, Крис

Я уже пытался использовать в rgl.spheres(... add=T) и пытался найти (для себя) логические команды, такие как add.spheres (...) или rgl.add.spheres (...), но эти, очевидно, не работают.

rgl.open()
x <- c(1,2,3,4,5,6)
y<-c(9,5,2,7,7,3)
z<-c(0.1,1,1,4,6,7)
x1 <- 1
y1 <- 9
z1 <- 0.1

rgl.spheres(x,y,z, r = 0.1, color = "grey")
rgl.spheres(x1,y1,z1, r=0.1, color="red", add=T) # is not working

так что если в rgl есть подобная команда, например, команда "points" для сфер или других объектов, то должна быть одна красная сфера и несколько серых сфер.

1 Ответ

0 голосов
/ 06 января 2019

Вы, вероятно, должны прочитать виньетку о rgl, используя vignette("rgl", package="rgl"). Но краткое резюме:

  • Не используйте функции rgl.*. Они являются функциями низкого уровня и вызовут у вас проблемы, если вы не очень хорошо знаете, как они работают. Используйте функции *3d, например, open3d, spheres3d и т. Д.
  • Большинство функций рисования (включая spheres3d) всегда добавляют к текущей сцене. Вам не нужно add = TRUE.
  • По умолчанию все, что будет нарисовано первым, будет показано, если две вещи нарисованы в одном месте. Поскольку обе ваши инструкции по рисованию сфер включают точку (1, 9, 0.1), появится только первая. Вы можете изменить это, чтобы сделать второе утверждение, нарисуйте большую сферу (чья ближняя сторона будет ближе к зрителю, поэтому видимой) или поиграйте с настройкой свойства материала depth_test. Установка depth_test = "lequal" означает, что будет показана последняя нарисованная вещь.

Собрав все это вместе, вот ревизия вашего кода:

library(rgl)
open3d()
x <- c(1,2,3,4,5,6)
y<-c(9,5,2,7,7,3)
z<-c(0.1,1,1,4,6,7)
x1 <- 1
y1 <- 9
z1 <- 0.1

spheres3d(x,y,z, r = 0.1, color = "grey")
spheres3d(x1,y1,z1, r=0.1, color="red", depth_test = "lequal") 
...