Я хотел бы нарисовать трехмерные стрелки на моем графике plot3d с помощью библиотеки rgl, как упоминалось, например, здесь. Но очевидно, что стрелки3d не являются частью пакета, это устаревшая или будущая музыка, поскольку ??arrows3D возвращает:

No vignettes or demos or help files found with alias or concept or title matching ‘arrows3D’ using fuzzy matching.
r rgl
2
raumkundschafter 28 Апр 2016 в 19:43

2 ответа

Лучший ответ

Последняя версия rgl (версия 0.95.1470, на данный момент доступна только в R-forge; см. Как установить последнюю версию rgl? о том, как ее получить) имеет функцию arrow3d(), смоделированную после функции heplots::arrow3d, но расширенную немного.

Он может рисовать стрелки, как функция heplots (т.е. состоящие из отрезков линий), или как плоские многоугольники, или как вытягивания многоугольников, или как вращение многоугольников. Пример справки ?arrow3d в настоящее время делает следующее:

xyz <- matrix(rnorm(300), ncol = 3)
plot3d(xyz)
arrow3d(xyz[1,], xyz[2,], type = "extrusion", col = "red")
arrow3d(xyz[3,], xyz[4,], type = "flat",      col = "blue")
arrow3d(xyz[5,], xyz[6,], type = "rotation",  col = "green")
arrow3d(xyz[7,], xyz[8,], type = "lines",     col = "black")
arrow3d(spriteOrigin = xyz[9:12,],            col = "purple")

Который производит этот вывод:

arrow3d example

Обычно он рисует только одну стрелку за вызов, но если вы запрашиваете 3D-спрайты (как в примере purple), он может рисовать несколько копий одной и той же стрелки.

3
user2554330 10 Май 2016 в 16:32

Пакет matlib, https://cran.r-project.org/package= matlib, содержит другую версию: arrows3d, которая принимает матрицу координат (x, y, z) и рисует стрелку для каждой из них. Другая функция, vectors3d рисует набор векторов (из источника) и обеспечивает маркировку каждого из них.

Они настроены на рисование геометрических трехмерных диаграмм и имеют более красивые наконечники стрелок, состоящие из трехмерных конусов.

Они используются, например, в функции regvec3d, которая рисует трехмерное представление модели двумерной множественной регрессии, y ~ x1 + x2 в пространстве средних отклонений.

Вот пример с использованием vectors3d

library(rgl)
library(matlib)
vec <- rbind(diag(3), c(1,1,1))
rownames(vec) <- c("X", "Y", "Z", "J")
open3d()
vectors3d(vec, color=c(rep("black",3), "red"), lwd=2, radius=1/25)
# draw the XZ plane, whose equation is Y=0
planes3d(0, 0, 1, 0, col="gray", alpha=0.2)
vectors3d(c(1,1,0), col="green", lwd=2, radius=1/25)

enter image description here

3
user101089 27 Сен 2016 в 17:45