我正在使用NVD3和Flask,我在x轴上有日期。
正如您所看到的那样,x轴上的线与点不一致。我在x轴上打印出日,月,年和小时。我不明白为什么日期不是等间距,即'x'轴数据的'小时'不一样,所以这些线的间隔超过“24小时”。我认为这导致了这个问题。
(编辑)的 我的代码是:
nv.addGraph(function() {
var chart = nv.models.lineChart();
chart.xAxis
.tickFormat(function(d) { return d3.time.format('%d %b %Y')(new Date(parseInt(d))) }
);
chart.yAxis
.tickFormat(d3.format(',.02f'));
chart.tooltipContent(function(key, y, e, graph) {
var x = d3.time.format('%d %b %Y')(new Date(parseInt(graph.point.x)));
var y = String(graph.point.y);
var y = String(graph.point.y);
tooltip_str = '<center><b>'+key+'</b></center>' + y + ' on ' + x;
return tooltip_str;
});
chart.showLegend(true);
d3.select('#lineChart svg')
.datum(data_lineChart)
.transition().duration(500)
.attr('width', 1200)
.attr('height', 450)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
答案 0 :(得分:10)
这里有一个更好的建议,因为d3如果未被声明为时间刻度,则不会很好地缩放由日期表示的x轴。
chart.xAxis
.tickFormat(function(d) {
return d3.time.format('%d-%m-%y')(new Date(d))
});
chart.xScale(d3.time.scale()); //fixes misalignment of timescale with line graph
答案 1 :(得分:4)
好的,明白了! 我所做的是创建一个时间戳的排序列表,这些时间戳将用作x轴上的数据并将它们舍入到最近的一天。然后我通过执行以下操作强制NVD3将此数据用作间隔而不是自动生成的间隔:
chart.xAxis
.tickValues({{x_data}})
其中x_data是列表。瞧! ...
答案 2 :(得分:0)
您可以明确控制滴答的生成方式。要相隔24小时打勾,代码就像
chart.xAxis.ticks(d3.time.day, 1);
击> <击> 撞击>
修改强>
看起来NVD3实际上并没有使用D3轴组件来生成标签,因此所有这些都没有效果。您必须修改NVD3的来源才能达到您想要的效果。