plot_ly 中的 z 参数到底是什么?

What exactly is the z argument in plot_ly?

我有三个变量:xyz,我想生成一个曲面图。

z<-runif(50,0,1) 
y<-runif(50,1,2)
x<-runif(50,3,6)
plot_ly(x = ~x, y = ~y, z= ~z) %>% add_surface()

我收到以下错误

Error: `z` must be a numeric matrix

如果不是纵轴对应的变量,z到底代表什么?我看过 Volcano 示例,他们使用矩阵生成该图,但我仍然不确定该示例中的 z 矩阵代表什么。

我想要的是有人使用 plot_ly 中的 surface 功能绘制一个易于理解的 3D 函数,例如 z=f(x,y) = x^2 + y^2,这样我就可以理解如何生成绘图基于三个变量。

上面代码的问题是,您没有指定 trace 类型 - 您需要传递给 z 参数的内容取决于此 规格.

传递参数 x、y、z 表明您想要显示 scatter3d 图 - 您可以通过删除 add_surface():

来测试它
z <- runif(50,0,1) 
y <- runif(50,1,2)
x <- runif(50,3,6)
plot_ly(x = x, y = y, z = z)

发出警告:

No trace type specified: Based on info supplied, a 'scatter3d' trace seems appropriate. Read more about this trace type -> https://plot.ly/r/reference/#scatter3d No scatter3d mode specifed:
Setting the mode to markers Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode

另一方面,

add_surface() 建议您要显示 3D 曲面图。 您已经提到了 volcano example。这种绘图只需要一个数字矩阵来创建绘图(参数 z)。

根据您的示例代码,您混淆了导致错误消息的两种绘图类型。

如何避免这种混淆?

如果您查看 ?plot_ly,其中有对传递给相应跟踪类型的参数“...”的描述(z 是其中之一):

Arguments (i.e., attributes) passed along to the trace type. See schema() for a list of acceptable attributes for a given trace type (by going to traces -> type -> attributes).

schema() 是一个非常有用的提示,可以帮助您在 plotly 库中定位自己。执行以下代码以以非常方便的方式浏览不同的绘图跟踪类型及其可用属性:

# install.packages("listviewer")

library(plotly)
library(listviewer)
schema(jsonedit = interactive())

我想这就是您最初想要的:

z <- runif(50,0,1) 
y <- runif(50,1,2)
x <- runif(50,3,6)
plot_ly(x = x, y = y, z = z, type = 'mesh3d')