将 persp3D 或 plot3D 与列中的数据一起使用并计算 NA 位置

Using persp3D or plot3D with data in columns and calculate the NA positions

我想使用包 rgl 中的 plot3Dpersp3D 函数,并且已经查看了包描述和虚拟数据集 "Volcano"。但我实际上无法使用我的数据执行以下操作:

我在 3 列中列出了一些数据,例如

Col1 Col2 Col3
1    0.2   2 
2    0.5   5
3    0.6   9
4    19    8
5    1.3   10
6    0.1   60

我想用 persp3Dplot3D 创建 3D 曲面图。当然我有更多的数据,但不能在这里列出。 正如我在 Volcano Plot 中看到的(如果我的建议是正确的),Volcano 数据包含像矩阵一样排列的数据。
所以我想,首先我想将我的数据设置为矩阵,如:

 2   5   9   8   10   
 60  1 0.2  NA   NA  
 NA  2  NA 0.5   NA
  3  NA  NA  0.6
  4  NA  NA  NA  19    

等等

5
6

当然,我看到火山数据矩阵是完整的,我有很多NA。是否有可能根据已测量值之间的模型计算 NAs?我认为计算值的确定性正在降低,你计算的距离测量值的对角线越远。

那么现在我的问题是:

如何将我的 3 列放入矩阵样式中以及如何计算缺失的 NA

非常感谢您, 克里斯

见上文

如果你想创建一个 3D 散点图,plotly 包是一个不错的选择。您可以直接 运行 下面的代码来创建示例图。您只需通过使用变量名称引用它们来指定 x、y、z 变量(参见数据框 mpg)。

# install.packages("plotly")
library(plotly)

plot_ly(data = mpg, x = ~cty, y = ~hwy, z = ~cyl) %>%
  add_markers(color = ~cyl, colors = colorRamp(c("yellow", "darkred")),
              alpha = 0.7, size = I(1)) %>% colorbar(title = "Cylinder") %>%
  layout(title= "3D Scatterplot", scene = list(xaxis = list(title = "CTY"),
                                               yaxis = list(title = "HWY"), 
                                               zaxis = list(title = "CYL"),
                                               range = c(3, 8)))

关于 NA 值:R 中的可视化包通常要么完全排除 NA 观察值(行),要么给出错误。如果它们出错,您可以手动删除它们(或替换它们,但这可能不是一个好主意)。

删除任何列中带有 NA 的行:

df = df[!apply(df, 1, anyNA), ]

这是一个扩展示例:

df = mtcars
df[4, 1] = NA
df[10, 4] = NA

# WITH NA
dim(df) # rows, columns in data set
anyNA(df) # any NAs in data set?
sum(is.na(df)) # number of NAs in data set

# REMOVING NA
df = df[!apply(df, 1, anyNA), ]
dim(df) # rows, columns in data set
anyNA(df) # any NAs in data set?
sum(is.na(df)) # number of NAs in data set

如果您的真实数据具有与示例矩阵一样多的 NA 个值,它可能无法在 rgl::persp3d 中正常工作。我建议您坚持使用 3 列格式,仅包括非 NA 值。

要绘制该格式的数据表面图,请参阅 。简短的版本是这样的:如果你的数据在一个名为 df 的数据框中,代码将是:

library(rgl)
dxyz <- deldir::deldir(x = df$col1, y = df$col2, z = df$col3, suppressMsge = TRUE)
plot3d(dxyz, col = "gray")