将 persp3D 或 plot3D 与列中的数据一起使用并计算 NA 位置
Using persp3D or plot3D with data in columns and calculate the NA positions
我想使用包 rgl
中的 plot3D
或 persp3D
函数,并且已经查看了包描述和虚拟数据集 "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 曲面图。当然我有更多的数据,但不能在这里列出。
正如我在 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
。是否有可能根据已测量值之间的模型计算 NA
s?我认为计算值的确定性正在降低,你计算的距离测量值的对角线越远。
那么现在我的问题是:
如何将我的 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")
我想使用包 rgl
中的 plot3D
或 persp3D
函数,并且已经查看了包描述和虚拟数据集 "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 曲面图。当然我有更多的数据,但不能在这里列出。
正如我在 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
。是否有可能根据已测量值之间的模型计算 NA
s?我认为计算值的确定性正在降低,你计算的距离测量值的对角线越远。
那么现在我的问题是:
如何将我的 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")