我有三个变量:x、y和z,我想要生成一个表面图。
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究竟代表什么?我见过火山的例子,他们用矩阵来生成那个图,但我仍然不确定z矩阵在这个例子中代表什么。
我想要的是有人用z=f(x,y) = x^2 + y^2中的surface功能绘制一个易于理解的3D函数,这样我就可以理解如何根据三个变量生成一个绘图。
发布于 2019-02-05 09:39:30
上面的代码的问题是,您还没有指定跟踪类型,您需要传递给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)这就发出了警告:
没有指定跟踪类型:根据提供的信息,“scatter3d”跟踪似乎是合适的。了解有关此跟踪类型-> https://plot.ly/r/reference/#scatter3d无scatter3d模式的详细信息: 将模式设置为标记,请阅读有关此属性-> https://plot.ly/r/reference/#scatter-mode的更多信息。
另一方面,add_surface()建议您要显示三维曲面图。你已经提到了火山实例。这种图形只需要一个数字矩阵就可以创建这个图(参数z)。
因此,在示例代码中,您混淆了这两种绘图类型,这将导致错误消息。
如何避免这种混乱?
如果您看一看?plot_ly,就会看到对参数“.”的描述。传递给相应的跟踪类型(z是其中之一):
参数(即属性)传递给跟踪类型。有关给定跟踪类型的可接受属性的列表(通过跟踪->类型的->属性),请参见schema()。
schema()是一个非常有用的提示,可以在巧妙的图书馆中定位自己。执行以下代码,以非常方便的方式浏览不同的跟踪类型及其可用属性:

# 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')https://stackoverflow.com/questions/54435463
复制相似问题