【问题标题】:plotting 3D surface with plotly (matrix transformation with akima::interp)使用 plotly 绘制 3D 表面(使用 akima::interp 进行矩阵变换)
【发布时间】:2020-04-09 08:44:09
【问题描述】:

为了在 plotly 中绘制带有 x、y、z 的曲面,我们可以使用函数 interp 创建数据(作为 plotly 中 add_surface 函数的输入)

This article给出解决方案。

我遵循不同的步骤。 通过以下代码,我们可以绘制带有标记的曲面。

library(akima)
library(plotly)

x=rep(seq(-1,5,0.2),time=31,each=1)
y=rep(seq(-1,5,0.2),time=1,each=31)

df=data.frame(x=x,y=y,
              z=2*x+y-1.4)


fig <- plot_ly()%>% add_markers(data=df,x = ~x, y = ~y, z = ~z,
          marker = list(color = "blue",
                        showscale = TRUE))

fig

我们可以看到下面的情节

然后我使用interp 为表面创建数据,并将表面与标记一起绘制。

s = interp(x = df$x, y = df$y, z = df$z)

fig <- plot_ly()%>% 
  add_surface(x = s$x, y = s$y, z = s$z)%>%
  add_markers(data=df,x = ~x, y = ~y, z = ~z,
              marker = list(color = "blue",
                            showscale = TRUE))

fig

我有以下图片。

我们可以看到结果不同。我不明白为什么。

当我尝试更改函数以生成 z 时,有时,两个曲面是相同的。比如对于这个data.frame

df=data.frame(x=x,y=y,
              z=x+y+1)

我们有以下图像。我们可以看到,这一次,我们得到了相同的表面。

【问题讨论】:

    标签: r plotly


    【解决方案1】:

    似乎xy 的含义在add_surface 中与interp 中的含义互换了。工作的例子有xy 对称出现。因此,通过转置z 矩阵将它们交换回来:

    fig <- plot_ly()%>% 
      add_surface(x = s$x, y = s$y, z = t(s$z))%>%
      add_markers(data=df,x = ~x, y = ~y, z = ~z,
                  marker = list(color = "blue",
                                showscale = TRUE))
    
    fig
    

    这只是一个猜测,因为plotly 中的文档非常薄弱。 akima::interp 清楚地记录了 z 的行对应于不同的 x 值。

    【讨论】:

      猜你喜欢
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      相关资源
      最近更新 更多