Plotly表面数据被排列为2d阵列(矩阵),其索引对应于x和y值,并且其元素指示z值。例如。如果element [0] [0]等于10,则表示(0,0,10)的(x,y,z)坐标。
问题:由于数组索引从零开始,因此似乎无法绘制具有负x或y值的曲面。
Here is a CodePen绘制了三个曲面。表面看起来很好,因为图中只显示了两个八分圆 - (+x,+y)
象限。如果所有八分圆都显示在图形中(CodePen),那么它最终看起来不完整,因为绘制的曲面不会延伸到剩余的3个象限中。
表面数据的一般形式是:
{ z : dataArray,
type : 'surface',
opacity : 0.9 }
有没有办法为表面数据提供xstart或ystart等,以便可以绘制完整的3D表面?
答案 0 :(得分:1)
如果您不提供,我们可以添加您自己的x
和y
坐标,只需假设它们。
x
(数据数组)
设置x坐标。
y
(数据数组)
设置y坐标。
代码基于示例here。
z = [[8.83,8.89,8.81,8.87,8.9,8.87],
[8.89,8.94,8.85,8.94,8.96,8.92],
[8.84,8.9,8.82,8.92,8.93,8.91],
[8.79,8.85,8.79,8.9,8.94,8.92],
[8.79,8.88,8.81,8.9,8.95,8.92],
[8.8,8.82,8.78,8.91,8.94,8.92],
[8.75,8.78,8.77,8.91,8.95,8.92],
[8.8,8.8,8.77,8.91,8.95,8.94],
[8.74,8.81,8.76,8.93,8.98,8.99],
[8.89,8.99,8.92,9.1,9.13,9.11],
[8.97,8.97,8.91,9.09,9.11,9.11],
[9.04,9.08,9.05,9.25,9.28,9.27],
[9,9.01,9,9.2,9.23,9.2],
[8.99,8.99,8.98,9.18,9.2,9.19],
[8.93,8.97,8.97,9.18,9.2,9.18]];
var x = [];
var y = [];
for (var i = 0; i < z.length; i += 1) {
x[i] = [];
y[i] = [];
for (var j = 0; j < z[i].length; j += 1) {
x[i].push(j + i - 10);
y[i].push(j - 3);
}
}
Plotly.newPlot('myDiv', [{z: z,
x: x,
y: y,
type: 'surface'}]);
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<div id="myDiv"></div>