我正在尝试在D3中绘制一个简单的折线图,但有一些问题。
我希望图表是动态的 - 所以当数据更新时,我希望图表转换为新值。所以我需要在我的代码中的某个地方使用D3转换,我找不到用线图做到这一点的好例子。
以下是我的代码的相关部分。目前,这根本没有任何吸引力。
var data = [
{
"air_produced": 0.660985,
"air_used": 0.342706,
"datestr": "2012-12-01 00:00:00",
"energy_used": 0.106402
} ... ];
var parseDate = d3.time.format("%Y-%m-%d %H:%M:%S");
data.forEach(function(d) {
d.date = parseDate.parse(d.datestr);
});
var x = d3.time.scale().range([0, width]);
var y = d3.scale.linear().range([height, 0]);
var line = d3.svg.line()
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.energy_used); });
// How to draw the line?
var linegraph = d3.select("path.line").datum(data);
line.transition().duration(1000).attr("d", line);
linegraph.enter().append("path")
.attr("class", "line")
.attr("d", line);
JSFiddle这里有完整的图表:http://jsfiddle.net/zNX8p/
答案 0 :(得分:2)
得到它(我认为):
var linegraph = svg.selectAll("path.line").data([data], function(d) { return d.date; });
linegraph.transition().duration(1000).attr('d', line);
linegraph.enter().append("path")
.attr("class", "line")
.attr("d", line);
datum
未返回enter
选项,因此您需要通过data
传递数据。
答案 1 :(得分:1)
d3具有您应该用于此案例的一般更新模式。
惯例是有两个功能,一个用于设置可视化,另一个用于获取数据和更新可视化。
更新函数接收新数据,绑定它,更新图形,然后根据需要添加或删除对象。
迈克博斯托克有一个很棒的3部分系列讲解你可以在这里找到:https://twitter.com/mbostock/status/252496768267333632