NVD3图的自动日期标注

时间:2015-10-01 17:48:40

标签: javascript d3.js graph nvd3.js

我希望在更改焦距范围时自动计算,显示和消失日期标签,使它们不重叠。

我正在使用带有焦点图表的MultiBar图表,其中nv.models.multiBar()的默认序数比例。当我在xAxis上使用.ticks(availableWidth / 100 )时,它似乎会为每个日期生成一个刻度标签,或者至少有很多日期:auto-generated labels

nv.models.lineWithFocusChart()上,标签会自动缩小以适应空间。这可能是因为它使用nv.models.scatter()的比例d3.scale.linear(),但我不确定。我尝试使用以下内容创建自己的比例:

x = d3.scale.ordinal() //as well as x = d3.scale.linear()
      .domain(d3.extent(data.map(function(d) {
                return d.values.map(function(d,i) {
                    var X = getX(d,i);
                    return X.getTime();
                });
            })))
         .range([0, availableWidth]);

我按顺序获得以下内容: enter image description here

并且没有线性刻度的标签。这种方法会起作用吗?如果是这样,我做错了什么?

nv.models.multiBarChart()上,有一个.reduceXTicks(BOOLEAN)选项,但这仅适用于multiBarChart,似乎没有一种简单的方法可以将其添加到nv.models.multiBar()。我可以以某种方式使用它吗?

如果有什么我没试过请告诉我。我不想自己计算标签,并使用.tickValues()

指定它们

1 个答案:

答案 0 :(得分:0)

事实上,解决方案是将d3.scale.linear()用于x轴。我上面尝试的东西没有用,因为当我需要指定当前选择的最小值和最大值时,我指定了上下文图表的整个域。

chart(selection) {...}中,我放了

x = d3.scale.linear() 
     .range([0, availableWidth]);

并在onBrush()中,我放了x.domain([new Date(extent[0]), new Date(extent[1])]);,其中范围包含选择的最小和最大日期(以毫秒为单位)。