Plotly 3dscatter 和色阶

Plotly 3dscatter and colorscale

我正在使用 Plotly.js 通过它的 JavaScript API 来绘制一些 3D 散点图。看起来棒极了:

在此图中,点的颜色基于点的 z 值。如果我将其更改为 x 或 y 值(通过更改 data[0].marker.color 数组)并重新绘制,就会出错:

我希望看到类似的内容:

无论我再次使用redraw还是newPlot。看起来一旦根据数据计算出色标,它就会保持从数据到颜色的相同映射函数。所以我的问题是如何 "invalidate" 色标,以便在使用新颜色数组重绘时重新计算。

更新

在 etpinard 的回答中(谢谢!)有一个简单的完整示例。然而,这个版本已经将所有 x、y 和 z 数据很好地缩放在 0 和 1 之间。即它有:

function randomArray() {
  var out = new Array(N);
  for(var i = 0; i < N; i++) {
    out[i] = Math.random();
  }
  return out;
}

var x = randomArray(),
    y = randomArray(),
    z = randomArray();

我的数据的 x、y 和 z 单位不同。我可以模拟这个:

function randomArray(lo,up) {
  var out = new Array(N);
  for(var i = 0; i < N; i++) {
    out[i] = lo+(up-lo)*Math.random();
  }
  return out;
}

var x = randomArray(0,1),
    y = randomArray(0,1),
    z = randomArray(0,1000);

这个版本的第一个情节看起来不错:

我们根据点的 z 值给点上色。但是当我点击 'x' 按钮时,我看到:

我希望这有助于重现问题。

您应该尝试使用 Plotly.restyle 进行排序操作。

举个例子:http://codepen.io/etpinard/pen/WrxRKO