为啥 plot_ly in plotly 绘制曲面图的 id 列?

Posted

技术标签:

【中文标题】为啥 plot_ly in plotly 绘制曲面图的 id 列?【英文标题】:Why does plot_ly in plotly plot the id column for the surface plot?为什么 plot_ly in plotly 绘制曲面图的 id 列? 【发布时间】:2020-12-23 07:31:51 【问题描述】:

我正在尝试为我拥有的一些随机数据创建一个曲面图,但我遇到了一个问题,即 plot_ly 正在绘制矩阵的 id 列。

下面是代码和随机数据的一小部分。

library(plotly)

random_data <- read_excel("Regression_Builder.xlsx", sheet = "Yield")
lm.O1 = lm(O1 ~ X1 + X2 + X3 + I(X1^2) + I(X3^2), data = random_data)

three_dims = data.frame(random_data$O1, random_data$X1, random_data$X2)
three_dims_mat = data.matrix(three_dims, rownames.force = NA)
#I saw a post that mentioned that using data.matrix can lead to issues and to instead use cbind.
#I attempted that and got the same results.

O1_surface = plot_ly(z = three_dims_mat[,1:3], type = "surface")
#I also tried with z = ~three . . . and also without the [,1:3]. Neither of these helped.
O1_surface

如您所见,一列 ID 为三列数据。此外,唯一接近 5000 的列是 id 列。

当我创建曲面图时,我得到了这个图:

x 和 y 轴肯定是关闭的,看起来 y 轴只是 id 列?

我对 R 很陌生,所以我真的只是按照另一个页面的说明进行操作,可以在这里看到: https://plotly.com/r/3d-surface-plots/

他们的所作所为似乎与我所做的没什么不同。他们使用的数据直接来自plotly,“火山”的结构类似于我的矩阵。

感谢您提供的任何帮助!

编辑:有人要求提供数据样本。这是前 20 个数据点。

    X1               X2             X3
1   -568.4093212    -306.6656476    35.08753966
2   -758.2562177    -310.9201146    32.64751489
3   -467.4339846    -364.0556644    34.09746155
4   -529.7232277    -310.837259     36.28913812
5   -535.9391621    -323.411462     39.75818106
6   -494.4654867    -386.835529     30.5269416
7   -490.3442684    -363.7089394    33.8776127
8   -392.6493419    -327.10129      31.22857484
9   -720.6745211    -339.3230459    35.09282461
10  -425.0705298    -324.8479801    32.0451123
11  -529.9568075    -317.8269927    35.48054421
12  -445.4251925    -422.9827843    34.80734687
13  -730.3447224    -307.6357161    33.58775347
14  -309.4192505    -434.2465323    29.17980084
15  -609.6549563    -382.4879761    31.16542379
16  -731.8211673    -345.8748154    32.76108565
17  -745.736109     -299.1330659    36.46136652
18  -589.5006466    -368.9677558    31.87794536
19  -655.5712467    -344.9485136    32.50361267
20  -536.5405239    -401.9952118    30.72522988

我希望这会有所帮助。谢谢!

【问题讨论】:

请包含您的数据样本。 【参考方案1】:

好的,所以我在这里找到了根本原因。

正如我所担心的,这主要是对 plot_ly 函数如何工作的误解。我曾认为它的工作原理类似于 3D 散点图,但回想起来并没有多大意义。

这个函数只需要一个高度值矩阵。该矩阵的行和列代表您尝试绘制的函数的 X 和 Y“输入”。我通过玩一个简单的例子发现了这一点:

L = cbind(c(1, 1, 1), c(1, 2, 1), c(1, 1, 1))
plot_l = plot_ly(z = L, type = "surface")
plot_l

结果如下:

对于遇到此问题并想看看我是如何得到我想要的表面图的任何人,下面是代码和图。剧情比较反气候,x、y轴在技术上也不对,不过是个开始!

X1_V = -476:-233
X2_C = 33.96
X3_V = 185:423

pred_func = function(x1, x3) predict(lm.O1, newdata = data.frame(X1 = x1, X2 = X2_C, X3 = x3))

O1_surface = plot_ly(z = pred_mat, type = "surface")
O1_surface

【讨论】:

以上是关于为啥 plot_ly in plotly 绘制曲面图的 id 列?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 plot_ly 饼图总是将 R 中的第 5 个值文本从白色变为黑色?

使用renderPlotly和plot_ly绘制数据的子集时,xAxis的值不正确

使用 Plotly 绘制动画 3D 曲面图

使用“Plots.jl”将 2d 函数绘制为 3d 空间中的曲面

R中子图plot_ly中每个图附近的图例

向 plot_ly 标记添加分类颜色会反转显示点的大小