Я хотел бы нарисовать трехмерные стрелки на моем графике plot3d с помощью библиотеки rgl, как упоминалось, например, здесь. Но очевидно, что стрелки3d не являются частью пакета, это устаревшая или будущая музыка, поскольку ??arrows3D
возвращает:
No vignettes or demos or help files found with alias or concept or title matching ‘arrows3D’ using fuzzy matching.
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")
Который производит этот вывод:
Обычно он рисует только одну стрелку за вызов, но если вы запрашиваете 3D-спрайты (как в примере purple
), он может рисовать несколько копий одной и той же стрелки.
Пакет 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)
Похожие вопросы
Связанные вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат полностью. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.