使用matlib + rgl时,vector3d()图形中的奇怪对象

问题描述 投票:0回答:1

我试图将三维矢量(x,y,z坐标)绘制到R中的3D坐标系上,如下图所示。理想情况下,我想构建3d内核密度图,如下图所示。

Ideal result of vector plot and 3d kernel density plot

我有一个矩阵,每个坐标(x,y,z)包含~100行和一列。最初,我尝试了plot3D包中的arrow3D(),但是我发现视角低于标准,在最终的情节中从一个角度辨别箭头的方向相当困难。接下来我尝试了rgl包,它给了我交互性 - 很棒。最小的工作示例:

library(rgl)
library(matlib)

data2 <- data.frame(replicate(6,rnorm(100))) #sample data set for minimum working example

colnames(data2) <- c("x_target", "y_target", "z_target", "x_start", "y_start", "z_start")

x1 <- data2$x_target - data2$x_start
y1 <- data2$y_target - data2$y_start
z1 <- data2$z_target - data2$z_start

vec <- (diag(6,3))     # coordinates for x, y and z axis
rownames(vec) <- c("X", "Y", "Z")   # labels for x, y and z axis

z <- as.matrix((data.frame(x=x1, y=y1, z=z1)))

open3d()

vectors3d(vec, color=c(rep("black",3)), lwd=2, radius=1/25)
vectors3d(X=z, headlength=1/25)

(由于随机数生成器,看起来很奇怪的棒出现在不同的坐标,不完全像我链接到下面的图像)

上面代码的结果是下面的图像链接的一个版本。一组坐标产生一个看起来非常奇怪的棒状物体,它比坐标产生的长得多。如果我单独绘制矢量,则不会创建此类对象。任何人都有任何想法为什么会这样?此外,如果任何人有一个工具(不一定是R),这可以创建像第一张图像中的3D矢量图,我将不胜感激。我发现它在R中非常复杂,但我绝对是初学者。

Strange object to the right (long red rod that doesn't look like an arrow at all)

谢谢!

r 3d rgl
1个回答
0
投票

这是由于matlib包中的一个错误,修正了该包的第0.9.2节。我认为您需要从Github而不是CRAN安装它来修复错误:

devtools::install_github("friendly/matlib")

顺便说一句,如果你在一个可重复的例子中使用随机数,你可以通过类似的东西使它完全可重复

set.seed(123)

在开始时(或123以外的一些数字)。我看到你的set.seed(4)示例可重现的问题。

© www.soinside.com 2019 - 2024. All rights reserved.