插值和曲面绘制

时间:2019-05-30 10:46:31

标签: r plot interpolation surface

我正在尝试使用三个向量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

heatmap plot

但是当我尝试应用“表面”类型时,使用命令

p <- plot_ly(x=x_hm,y=y_hm,z=z_hm,type = "surface")
p

我得到一个空的情节。

empty surface plot

我在网上搜索了解决方案,显然,大量的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

有人可以帮助我处理一般的表面绘图问题吗?或者在插值部分给我任何提示?

谢谢。

0 个答案:

没有答案