Time NVD3 x轴时间刻度未对准

Time NVD3 x轴时间刻度未对准,time,d3.js,scale,graphic,nvd3.js,Time,D3.js,Scale,Graphic,Nvd3.js,我正在尝试设置一个折线图nvd3图形,但我得到的时间值在x轴上没有垂直对齐,代码如下: function fillData() { var test1 = [], test2 = [], test3 = []; var now = new Date(), day = 1000*60*60*24; var cont = 0; for (var i = now - 9*day; i < now; i+=day) { var arr = [400,431

我正在尝试设置一个折线图nvd3图形,但我得到的时间值在x轴上没有垂直对齐,代码如下:

function fillData() {

var test1 = [],
    test2 = [],
    test3 = [];

var now =  new Date(),
   day = 1000*60*60*24;

var cont = 0;

for (var i = now - 9*day; i < now; i+=day)
{

    var arr = [400,431,401,430,429,450,448,498,421,421];
    var arr1 = [420,415,421,410,439,430,468,448,441,421];
    var arr2 = [410,425,431,420,459,420,458,438,451,421];

    test1.push({x: i, y: arr[cont]});
    test2.push({x: i, y: arr1[cont]});
    test3.push({x: i, y: arr2[cont]});
    cont+=1;

} // fin for

return [
    {
      values: test1,
      area: true,
      key: 'test1',
      color: '#81BA63'
    },
    {
      values: test2,
      area: true,
      key: 'test2',
      color: '#EAEAEA'
    },
    {
      values: test3,
      area: true,
      key: 'test3',
      color: '#6389BA'
    }
  ];
}

nv.addGraph(function() {
var chart = nv.models.lineChart()

    .margin({top: 0, bottom: 25, left: 45, right: 0})
    .showLegend(true)
    .forceY([300,500])

chart.yAxis
    .showMaxMin(true)
    .tickFormat(d3.format('.02'))

chart.xAxis
    .showMaxMin(false)
    .tickFormat(function(d) { return d3.time.format('%d - %b')(new Date(d)) });
     chart.xScale(d3.time.scale());


d3.select('#sources-chart-line svg')
    .datum(fillData())
    .transition().duration(500)
    .call(chart);

nv.utils.windowResize(chart.update);

return chart;
});
函数fillData(){
var test1=[],
test2=[],
test3=[];
var now=新日期(),
日=1000*60*60*24;
var-cont=0;
对于(var i=now-9*天;i
问题截图:


提前谢谢

问题在于数据点(9)和轴刻度(8)的数量不同。D3为刻度选择“代表性”刻度,不一定与数据点对齐。因此,您可以在日期仍然正确的数据点之间获得刻度,但与数据点不同的是,不是在午夜

解决此问题的一种方法是显式指定刻度值:

var data = fillData();
chart.xAxis
  .tickValues(data[0].values.map(function(d) { return d.x; }));

这有点难看,但它显示了原理,您可以重构代码以使这些值更易于访问。

谢谢,我现在就试试看:未捕获引用错误:未定义tickValues