【问题标题】:What exactly is the z argument in plot_ly?plot_ly 中的 z 参数到底是什么?
【发布时间】:2019-06-23 10:21:09
【问题描述】:

我有三个变量: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,这样我就可以了解如何基于三个变量生成绘图。

【问题讨论】:

    标签: r plotly r-plotly


    【解决方案1】:

    上述代码的问题在于,您没有指定 跟踪类型 - 您需要传递给 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() 建议您要显示 3D 曲面图。 你已经提到了volcano example。这种绘图只需要一个数字矩阵来创建绘图(参数 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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2015-05-30
      • 2016-01-17
      • 2016-03-24
      • 2021-12-22
      相关资源
      最近更新 更多