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

时间:2016-02-17 14:37:16

标签: javascript jquery graph vis.js

我使用vis.js Graph3d库用我的数据绘制3D图形。假设X轴代表我的节点,Y轴代表最后5个小时,Z轴代表值。对于我想要表示为空格的节点没有读数,可能会有几个小时。如果第一个节点包含所有小时的数据,并且后续节点在几个小时内缺少数据,则此方法可以正常工作。

This示例小提示演示了它只考虑2个节点。

现在,如果第一个节点缺少数据,那么在旋转图形时,渲染内容会与条形图相互重叠。

This小提琴演示了相同的内容。这个帖子也是如此。

奇怪的部分,如果你修改数据填充而不是跳过第二个小时的数据,跳过它任何其他小时,图形渲染完美。例如this小提琴。

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

我通过在开头有一个额外的虚拟节点来做一个临时的解决方法,其中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>

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

此外,不再需要对数据点进行排序以确定初始值。