我正在尝试使用三个向量x,y,z作为包装的输入来绘制表面。
x,y是因子的向量,用于定义xy平面中的坐标系,而z是数字向量,用于定义曲面点的高度。
x_hm <- sel_mat$xlogbin ## a vector of factors
y_hm <- sel_mat$ylogbin ## a vector of factors
z_hm <- as.numeric(sel_mat$logbin_log_avg) ## a numeric vector
您可以在
中查看数据表单> head(x_hm,10)
[1] (4.59e+05,5.78e+05] (1.83e+05,2.3e+05] (1.15e+05,1.45e+05] (2.9e+05,3.65e+05] (3.65e+05,4.59e+05]
[6] (3.65e+05,4.59e+05] (9.16e+04,1.15e+05] (2.9e+05,3.65e+05] (7.28e+04,9.16e+04] (7.28e+04,9.16e+04]
50 Levels: (57.8,72.8] (72.8,91.6] (91.6,115] (115,145] (145,183] (183,230] (230,290] (290,365] ... (4.59e+06,5.78e+06]
> head(y_hm,10)
[1] (4.76e+04,6e+04] (3.01e+04,3.78e+04] (9.5e+03,1.2e+04] (3.01e+04,3.78e+04] (3.78e+04,4.76e+04]
[6] (3.01e+04,3.78e+04] (7.55e+03,9.5e+03] (3.78e+04,4.76e+04] (9.5e+03,1.2e+04] (7.55e+03,9.5e+03]
32 Levels: (600,755] (755,950] (950,1.2e+03] (1.2e+03,1.51e+03] (1.51e+03,1.9e+03] ... (7.55e+05,9.5e+05]
> head(z_hm,10)
[1] 10.552476 10.653927 9.830332 10.427928 10.494196 10.692581 9.612432 10.226068 9.725735 9.505427
及其尺寸
> length(x_hm)
[1] 484
> length(y_hm)
[1] 484
> length(z_hm)
[1] 484
我可以使用以下命令绘制热图
p <- plot_ly(x=x_hm,y=y_hm,z=z_hm,type = "heatmap")
p
但是当我尝试应用“表面”类型时,使用命令
p <- plot_ly(x=x_hm,y=y_hm,z=z_hm,type = "surface")
p
我得到一个空的情节。
我在网上搜索了解决方案,显然,大量的NA使得无法绘制表面。在此链接(https://community.plot.ly/t/need-help-with-3d-surface-plot-in-r-using-plotly/2964)处,有一个针对同一问题的解决方案。基本上,您会生成一个尺寸为(length(x),length(y))的数据框z,并使用akima包中的interp函数对缺失值进行插值。这是我正在使用的代码:
surf <- akima::interp(1:length(x_hm), 1:length(y_hm),xo=1:length(x_hm),yo=1:length(y_hm), z_hm, duplicate = "mean")
surf$z
但是surf $ z是所有NA的矩阵。
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17]
[1,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[2,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[3,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[4,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[5,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[6,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[7,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[8,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[9,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[10,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
有人可以帮助我处理一般的表面绘图问题吗?或者在插值部分给我任何提示?
谢谢。