vis.js Graph3d 条形图 - 可能存在错误?

vis.js Graph3d Bar graph- Possible Bug?

我正在使用 vis.js Graph3d 库用我的数据绘制 3D 图形。假设 X 轴代表我的节点,Y 轴代表过去 5 小时,Z 轴代表值。可能有几个小时没有我想表示为空白的节点的读数。如果第一个节点所有小时都有数据并且后续节点有几个小时的数据丢失,这将按预期工作。

This 示例 fiddle 演示仅考虑 2 个节点。

现在,如果第一个节点缺少数据,则渲染会在旋转图形时出现相互重叠的条形图。

This fiddle 演示相同。同样嵌入到post.

奇怪的是,如果您修改数据填充而不是跳过第 2 小时的数据,而是跳过任何其他小时的数据,则图形呈现完美。例如 this fiddle.

有人能告诉我这里发生了什么吗?

我做了一个临时解决方法,在开头有一个额外的虚拟节点,其中 z 轴的所有值都设置为 0。如果有人提出修复建议,我会很高兴。

提前致谢。

var data = null;
    var graph = null;

 /**
  * Returns a random number between min (inclusive) and max (exclusive)
  */
 function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
 }
 
    // Called when the Visualization API is loaded.
    function drawVisualization() {
      var style = 'bar';
      // Create and populate a data table.
      data = new vis.DataSet();
   
   //Poppulating the data
      for (var y = 1; y <= 5; y++) {
        if(y==2) {
          continue;
        }
        var z = getRandomArbitrary(1,5);
        data.add({x:1, y:y, z:z});
      }
      for (var y = 1; y <= 5; y++) {
        var z = getRandomArbitrary(1,5);
        data.add({x:2, y:y, z:z});
      }

      // specify options
      var options = {
        width:  '700px',
        height: '700px',
        style: style,
        showPerspective: true,
        showGrid: true,
        showShadow: false,
    verticalRatio: 0.5,
    zMin: 0,
    zMax: 5,
    xStep: 1,
    xCenter: '50%',
        yCenter: '30%',

        // Option tooltip can be true, false, or a function returning a string with HTML contents
        //tooltip: true,
        tooltip: function (point) {
          // parameter point contains properties x, y, z
          return 'value: <b>' + point.z + '</b>';
        },

        keepAspectRatio: true,
        verticalRatio: 0.5
      };

      var camera = graph ? graph.getCameraPosition() : null;

      // create our graph
      var container = document.getElementById('mygraph');
      graph = new vis.Graph3d(container, data, options);

      if (camera) graph.setCameraPosition(camera); // restore camera position
   
   var pos = {horizontal: 1.0, vertical: 0.5, distance: 2};
      graph.setCameraPosition(pos);
    }

drawVisualization();
html, body {font: 10pt arial;
   padding: 0;
      margin: 0;
      width: 100%;
      height: 100%;
   }
 
 #mygraph {
   padding: 0;
      margin: 0;
      width: 100%;
      height: 100%;
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script src="http://cdnjs.cloudflare.com/ajax/libs/vis/3.6.4/vis.min.js">
</script>

<body>
  <div id="mygraph"></div>
</body>

发布我从开发者那里得到的答案。

如果未配置,Graph3d 会根据第一个和第二个条之间的距离自动检测条宽度。您可以手动配置条形宽度:

var options = {
  xBarWidth: 1, 
  yBarWidth: 1,
  // ...
}

我很高兴地报告此问题已在 vis.js v4.19.1 中得到修复。

如果未指定明确的条形宽度 and/or 高度,这些值现在将默认为数据点之间的最小距离(每个维度)。所以,所有的数据点都被考虑了,而不仅仅是前两个。

另外,数据点不需要再进行排序来确定初始值。