我想使用软件包plot3D
中的persp3D
或rgl
函数,并且已经研究了软件包描述和虚拟数据集“ 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
,我想用persp3D
或plot3D
制作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
?
非常感谢您, 克里斯
见上文
答案 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")