Я следовал учебник по 3D визуализации с использованием пакета «RGL» herePicture Выпуклая оболочка в 3D Scatter Plot
Так что я был в состоянии нарисовать 3D Scatter Plot с данными «ИРИС» и создать эллипсоид окружающих 95% точек данных:
library("rgl")
data(iris)
x <- sep.l <- iris$Sepal.Length
y <- pet.l <- iris$Petal.Length
z <- sep.w <- iris$Sepal.Width
plot3d(x, y, z, col="blue", box = FALSE,
type ="s", radius = 0.15)
ellips <- ellipse3d(cov(cbind(x,y,z)),
centre=c(mean(x), mean(y), mean(z)), level = 0.95)
plot3d(ellips, col = "blue", alpha = 0.2, add = TRUE, box = FALSE)
Я знаю, что первые 50 точек данных относятся к другой популяции по сравнению с остальной набор данных, поэтому цвет их по-другому, и нам два эллипсоиды, чтобы покрыть их:
plot3d(x, y, z, col=c(rep("gold2",50),rep("forestgreen",100)), box = FALSE,
type ="s", radius = 0.15)
ellips1 <- ellipse3d(cov(cbind(x[1:50],y[1:50],z[1:50])),
centre=c(mean(x[1:50]), mean(y[1:50]), mean(z[1:50])), level = 0.999)
ellips2 <- ellipse3d(cov(cbind(x[51:150],y[51:150],z[51:150])),
centre=c(mean(x[51:150]), mean(y[51:150]), mean(z[51:150])), level = 0.999)
plot3d(ellips1, col = "gold2", alpha = 0.2, add = TRUE, box = FALSE)
plot3d(ellips2, col = "forestgreen", alpha = 0.2, add = TRUE, box = FALSE)
Хотя обе популяции могут быть четко дифференцированы друг от друга, эллипсоиды касаются друг друга. Поэтому эллипсоиды не являются хорошим визуальным представлением точек данных. В 2D-графике я предпочел бы использовать полиномиальный whitch, окружающий все точки данных, но в 3D что-то вроде выпуклой оболочки должно быть адекватным, то есть многогранником, состоящим из трехугольных областей, каждый из которых объединяет три внешних точки данных.
Я думаю, что функция convhulln(), использующая алгоритм QuickHull в «геометрии» пакета, была бы полезна, но я не могу это использовать.
Есть ли у кого-нибудь идея, как изобразить такую выпуклую оболочку на участке rgl? Возможно ли это сделать с пакетом plot3D, так как есть большой учебник here, который я мог бы использовать, чтобы сделать красивый сюжет с моими собственными данными.
Я «единственный» биолог, использующий R для науки, а не математик или программист R, поэтому, пожалуйста, объясните свое решение для меня. Большое спасибо.
Вы пробовали УПАКОВКИ R геометрии? если у вас есть проблемы с этим, я могу помочь –
Да, я попробовал. Я думаю, функция convhulln() может быть полезна, но я не смог включить результат в график rbl или plot3D. «convhulln (cbind (x, y, z))» дает матрицу, но с очень большими целыми значениями выше, чем у cbind (x, y, z). Так что либо что-то не работает, либо я не понимаю выход. – ossesso