我在我的PHP代码中第一次使用nvd3.js。
我想针对特定用户显示针对日期的图表计数。我想水平显示日期并垂直计数。但我不明白该怎么做。
我的json数据类似于:["key":"0","values":[["1374517800000","2"]]},"182398":{"key":"182398","values":[["1375295400000","2"],["1374517800000","2"],["1374604200000","12"],["1374431400000","1"],["1375122600000","4"],["1375209000000","19"]]},"185271":{"key":"185271","values":[["1374604200000","2"],["1374517800000","1"]]]
和
var chart;
nv.addGraph(function() {
chart = nv.models.cumulativeLineChart()
.x(function(d) { return d[0]})
.y(function(d) { return d[1]})
.color(d3.scale.category10().range())
.clipVoronoi(false);
chart.xAxis
.tickFormat(function(d) {
return d3.time.format('%x')(new Date(d))
});
chart.yAxis
.tickFormat(d3.format(',.1%'));
d3.select('#cumulative_line_chart svg')
.datum(stageArr)
//.transition().duration(500)
.call(chart);
//TODO: Figure out a good way to do this automatically
nv.utils.windowResize(chart.update);
//nv.utils.windowResize(function() { d3.select('#chart1 svg').call(chart) });
chart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });
return chart;
});
现在在这种情况下,我的第一个问题是日期没有正确显示(我将日期转换为strtotime(),然后使用日期例如1375295400000 =strtotime("23-07-2013")."000"
连接000并且此转换发生在php中)。
第二个问题是在y轴上我想显示像2,12,4,19这样的整数(按照上面的json数据)等。
所以请指导我如何做到这一点。
提前致谢。
更新: 很抱歉,它不是d3.js,但它是nvd3.js。
答案 0 :(得分:1)
正在寻找这样的东西? here是cde的工作版本
nv.addGraph(function () {
var chart = nv.models.lineChart().margin({
top: 30,
right: 20,
bottom: 50,
left: 45
}).showLegend(true).tooltipContent(function (key, y, e, graph) {
return '<h3>' + key + '</h3>' + '<p>' + e + '% at ' + y + '</p>'
});
chart.xAxis.tickFormat(function (d) {
return d3.time.format('%x')(new Date(d))
});
d3.select('#lineChart svg')
.datum(data)
.transition().duration(500)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
data = [{
"values": [{
"x": 1025409600000 ,
"y": 2
}, {
"x": 1028088000000 ,
"y": 4
}, {
"x": 1030766400000 ,
"y": 1
}, {
"x": 1033358400000 ,
"y": 3
}, {
"x": 1036040400000 ,
"y": 0
}, {
"x": 1038632400000 ,
"y": 3
}],
"key": "Sine Wave",
}]
希望它有所帮助。
答案 1 :(得分:0)
你必须定义轴的比例:它不是根据你的数据计算的,但你可以使用d3的辅助函数,比如d3.max ......
var xScale = d3.scale.linear()
.domain([0, d3.max(dataset, function(d) { return d[0]; })])
.range([0, w]);
c.f。 http://alignedleft.com/tutorials/d3/scales
然后,您可以将比例定义添加到轴:
var xAxis = d3.svg.axis()
.scale(xScale)
.orient("bottom");