Javascript 对于d3 js中的linearscale,我们如何在具有不同值的所有刻度之间留出相等的空间

Javascript 对于d3 js中的linearscale,我们如何在具有不同值的所有刻度之间留出相等的空间,javascript,d3.js,Javascript,D3.js,我一直在寻找每个刻度之间的相等间距 我们如何使用“线性比例”(scale linear)获得间隔不等的每个刻度之间的相等空间 我们如何使用“线性比例”(scale linear)获得间隔不等的每个刻度之间的相等空间 我们如何使用“线性比例”(scale linear)获得间隔不等的每个刻度之间的相等空间 我用的是D3Verison4。 下面是片段 var xCoordinates=[20,25,31.5,40,50,63,80, 100, 125, 160, 200, 250, 315, 40

我一直在寻找每个刻度之间的相等间距

我们如何使用“线性比例”(scale linear)获得间隔不等的每个刻度之间的相等空间

我们如何使用“线性比例”(scale linear)获得间隔不等的每个刻度之间的相等空间

我们如何使用“线性比例”(scale linear)获得间隔不等的每个刻度之间的相等空间

我用的是D3Verison4。 下面是片段

var xCoordinates=[20,25,31.5,40,50,63,80,
100, 125, 160, 200, 250, 315,
400, 500, 630, 800, 1000, 1200,
1600, 2000, 2500, 3200, 4000, 5000,
6300, 8000, 10000, 12500, 16000, 20000];
var yCoordinates=[-18,-15,-12,-9,-6,-3,0,3,6,9,12,15,18];
var-margin={顶部:50,右侧:50,底部:50,左侧:50};
变量宽度=900-margin.left-margin.right;
变量高度=500-margin.top-margin.bottom;
控制台日志(d3);
var xScale=d3.scaleLinear()
.域(d3.范围(X坐标))
.rangeRound([0,宽度]);
var yScale=d3.scaleLinear()
.域(d3.范围(Y坐标))
.范围([高度,0]);
var svg=d3.select('.graph').append('svg'))
.attr('width',width+margin.left+margin.right)
.attr('height',height+margin.top+margin.bottom)
.append('g')
.attr('transform','translate('+margin.left+','+margin.top+'));
var xAxis=svg.append('g')
.attr('class','x轴')
.attr('transform','translate(0',+height+'))
.call(d3.axisBottom(xScale)
.滴答声(10)
.数值(xCoordinates)
.1(5)
.d格式(函数(d){
如果(d==20){
d=d+‘Hz’;
}
否则,如果((d/1000)>=1){
d=d/1000+“k”;
}
返回d;
}));
var yAxis=svg.append('g')
.attr('class','y轴')
.call(d3.axisLeft(yScale)
.Yc值(yCoordinates)
.d格式(函数(d){
如果(d==0){
d=d+'dB';
}
返回d;
}));

如果数据只有X个值与xCoordinates中的值相匹配,则可以使用scaleOrdinal

但是,如果数据的X值介于xCoordinates中的值之间,并且希望xScale在X轴上的点之间线性定位数据点,则必须:

  • 将xScale.range的数组设置为与xCoordinates数组和
  • xScale.range数组中的每一项都是一个介于0和宽度之间的设置间隔。例如,您的XCoordination 31个项目,因此xScale.range数组中的每个值将是[(0*(宽度/31)),(1*(宽度/31)),(2*(宽度/31)),…(30*(宽度/31))]。您可以使用for循环或类似工具创建

这很好-您想要哪个选项(scaleOrdinal,还是在.range中使用多个值)?在range中使用多个值