我想创建一个条形图,使用字符串作为 x 轴上刻度的标签(例如,第 1 年、第 2 年等而不是 0、1、2 等)。
我首先使用 x 轴的数值(例如,0、1、2、3 等),如下所示:
1)我生成我的范围:
x = d3.scale.ordinal()
.domain(d3.range(svg.chartData[0].length)) //number of columns is a spreadsheet-like system
.rangeRoundBands([0,width], .1);
y = d3.scale.linear()
.domain(Math.min(d3.min(svg.chartData.extent),0), Math.max(d3.min(svg.chartData.extent),0)])
.range([height, 0])
.nice();
2)制作轴:
d3.svg.axis()
.scale(x);
3)重绘轴:
svg.select(".axis.x_axis")
.call(make_x_axis().orient("bottom").tickSubdivide(1).tickSize(6, 3, 0));
这适用于默认的数字轴标签。
如果我尝试对这样的 x tickValues 使用字符串数组......
d3.svg.axis()
.scale(x).tickValues(svg.pointsNames); //svg.pointsNames = ["Year 1", "year 2", etc.]
...当我重绘图表(对数据/设置进行更改或不更改)时,标签会像这样交换。
请注意 Col 1 如何取代 Col 0,反之亦然。
你知道为什么会这样吗?