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

时间:2018-12-27 18:55:15

标签: r rgl

我想使用软件包plot3D中的persp3Drgl函数,并且已经研究了软件包描述和虚拟数据集“ 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表面图。当然我有更多数据,但无法在此处列出。 正如我在“火山图”中所看到的(如果我的建议正确),火山数据包含的数据像矩阵一样排列。
所以我想,一开始我想将数据设置为如下矩阵:

 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

当然,我看到来自Volcano的数据矩阵是完整的,并且我有许多NA。是否可以根据模型在已经测量的值之间计算NA?我认为计算值的确定性正在降低,离您从测量值的对角线算起的距离越远。

现在我的问题:

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

非常感谢您, 克里斯

见上文

2 个答案:

答案 0 :(得分:0)

如果要创建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

答案 1 :(得分:0)

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

要绘制该格式的数据表面图,请参见https://stackoverflow.com/a/53485406/2554330。简短的版本是这样的:如果您的数据位于名为df的数据框中,则代码为:

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