修改d3.js代码以生成静态3d图

时间:2017-02-01 21:30:18

标签: javascript d3.js data-visualization

我尝试使用D3创建交互式3D绘图,但是从numpy中获取数据。我在这里找到了一个很好的D3示例: http://bl.ocks.org/hlvoorhees/5986172

任何人都可以找出我需要在此代码中更改哪些行

  1. 停止动画
  2. 提供我选择的xy数据值
  3. ···

2 个答案:

答案 0 :(得分:2)

在Javascript文件的末尾,替换此行:

setInterval( updateData, defaultDuration );

用这个:

function waitForX3d(resolve) {
  if ( x3d.node() && x3d.node().runtime ) {
    resolve();
  } else {
    new Promise(r => setTimeout(r, 100))
    .then(() => waitForX3d(resolve));
  }
}
// setInterval( updateData, defaultDuration );
new Promise(r => waitForX3d(r))
.then(() => updateData());

更改updateData函数以将数据加载到rows变量中。

答案 1 :(得分:0)

最终我意识到rows变量是我需要改变的。我在initializeDataGrid()

中修改了它

然后代替setInterval(updateData,defaultDuration)我把plotData()

现在我可以在交互式3D网格中绘制任何数据集了!

@@ -235,11 +234,13 @@ function scatterPlot3d( parent )
   function initializeDataGrid() {
     var rows = [];
     // Follow the convention where y(x,z) is elevation.
+        //EDIT THIS FOR STATIC DATA!!!
     for (var x=-5; x<=5; x+=1) {
       for (var z=-5; z<=5; z+=1) {
-        rows.push({x: x, y: 0, z: z});
+        rows.push({x: x, y: (x+z)/2, z: z});
      }
     }
+    rows.push({x: 2.5, y: 0, z: 2.5});
     return rows;
   }
@@ -259,8 +261,5 @@ function scatterPlot3d( parent )

   initializeDataGrid();
   initializePlot();
-  setInterval( updateData, defaultDuration );
+  plotData();