D3.js ds3.js水平条-如何使y轴居中?

D3.js ds3.js水平条-如何使y轴居中?,d3.js,D3.js,下面我将制作一个带有正负值的水平条形图 我试着将y轴居中,这样x轴的每边长度都是一样的。但是在那里找不到任何例子。我希望x轴的比例对数据保持敏感,因此不希望指定范围 我无法得到他在工作中给出的榜样 对于定量标度,使用d3.extent计算数据域(最小值和最大值): 刻划刻度将使范围略微扩大到最接近的整数。如果希望零值 集中在画布的中间,取更大的 最小值和最大值的大小,或简单地硬编码 所需域 任何关于如何正确计算域名的例子或帮助都是最受欢迎的 首先,让我们看看哪个更大,最小值还是最大值: var

下面我将制作一个带有正负值的水平条形图

我试着将y轴居中,这样x轴的每边长度都是一样的。但是在那里找不到任何例子。我希望x轴的比例对数据保持敏感,因此不希望指定范围

我无法得到他在工作中给出的榜样

对于定量标度,使用d3.extent计算数据域(最小值和最大值):

刻划刻度将使范围略微扩大到最接近的整数。如果希望零值 集中在画布的中间,取更大的 最小值和最大值的大小,或简单地硬编码 所需域


任何关于如何正确计算域名的例子或帮助都是最受欢迎的

首先,让我们看看哪个更大,最小值还是最大值:

var greater;

if (Math.abs(d3.min(data, function(d){ return d.value})) > Math.abs(d3.max(data, function(d){ return d.value}))) {
  greater = Math.abs(d3.min(data, function(d){ return d.value}));
  } else {
  greater = Math.abs(d3.max(data, function(d){ return d.value}));
  };
然后设置比例:

var x = d3.scale.linear()
 .domain([greater * -1, greater])
 .range([0, width]); 
var x = d3.scale.linear()
 .domain([greater * -1, greater])
 .range([0, width]);