首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对列中的数据使用persp3D或plot3D并计算NA位置

对列中的数据使用persp3D或plot3D并计算NA位置
EN

Stack Overflow用户
提问于 2018-12-27 18:55:15
回答 2查看 244关注 0票数 0

我想使用包plot3Dpersp3D函数rgl,并且已经查看了包描述和虚拟数据集"Volcano“。但实际上,我无法用我的数据得出以下结论:

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

代码语言:javascript
运行
复制
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创建一个三维的曲面图。当然,我有更多的数据,但不能在这里列出。正如我在火山图中所看到的(如果我的建议是正确的),火山数据包含数据,像矩阵一样排列。

所以我想,首先,我想把我的数据设置为一个矩阵,比如:

代码语言:javascript
运行
复制
 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    

诸若此类

代码语言:javascript
运行
复制
5
6

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

所以现在我的问题是:

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

提前谢谢你,克里斯

见上文

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-27 21:02:50

如果实际数据的NA值与示例矩阵一样多,那么它在rgl::persp3d中可能不能很好地工作。我建议您坚持使用3列格式,只包括非NA值。

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

代码语言:javascript
运行
复制
library(rgl)
dxyz <- deldir::deldir(x = df$col1, y = df$col2, z = df$col3, suppressMsge = TRUE)
plot3d(dxyz, col = "gray")
票数 0
EN

Stack Overflow用户

发布于 2018-12-27 19:48:37

如果您想要创建一个三维散点图,巧妙的包是一个很好的选择。您可以直接运行下面的代码来创建一个示例图。您只需通过引用x、y、z变量名来指定x、y、z变量(参见数据帧mpg)。

代码语言:javascript
运行
复制
# 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的行:

代码语言:javascript
运行
复制
df = df[!apply(df, 1, anyNA), ]

下面是一个扩展的示例:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53949598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档