我正在尝试绘制折线图。以下数组不是您将传递给d3js的典型数据,因此我知道我需要编写一个自定义函数来访问正确的数据,例如.x(function(d) { return xScale(parseDate(d.date)) })
。这适用于带有对象的数组的数组,但是我似乎无法使它适用于带有带有对象的值数组的对象的数组(请参阅参考资料balance
)。我该怎么写?还有编写这些访问器的更好的文档吗?我一直找不到一致而透彻的资源。
var test_accounts = [
{name: "test1",
balance:
[
{date: "2014-07-15", y: 20},
{date: "2014-07-15", y: 10},
{date: "2014-07-16", y: 40},
{date: "2014-07-16", y: 10},
{date: "2014-07-17", y: 4},
{date: "2014-07-17", y: 10},
{date: "2014-07-18", y: 30},
{date: "2014-07-18", y: 10},
{date: "2014-07-19", y: 10},
{date: "2014-07-19", y: 10},
{date: "2014-07-20", y: 0},
{date: "2014-07-20", y: 10},
{date: "2014-07-21", y: 10},
{date: "2014-07-21", y: 10},
{date: "2014-07-22", y: 80},
{date: "2014-07-22", y: 10}
]},
{name: "test2",
balance:
[
{date: "2014-07-15", y: 50},
{date: "2014-07-15", y: 30},
{date: "2014-07-16", y: 70},
{date: "2014-07-16", y: 20},
{date: "2014-07-17", y: 40},
{date: "2014-07-17", y: 50},
{date: "2014-07-18", y: 10},
{date: "2014-07-18", y: 30},
{date: "2014-07-19", y: 60},
{date: "2014-07-19", y: 40},
{date: "2014-07-20", y: 10},
{date: "2014-07-20", y: 60},
{date: "2014-07-21", y: 80},
{date: "2014-07-21", y: 50},
{date: "2014-07-22", y: 90},
{date: "2014-07-22", y: 20}
]}
];
var line = d3.svg.line()
.x(function(d) { return xScale(parseDate(d.date)) })
.y(function(d) { return yScale(d.y) })
.interpolate("linear");
// draw the line
var drawline = svg.selectAll("svg")
.data(line1node).enter()
.append("path")
.attr("d", line)
.attr("class", "line")
.attr("stroke", function(d, i) { return linecolors(i); })
.attr("stroke-width", 2)
.attr("fill", "none")
.attr("transform", "translate(0,0)");
注意:这只是一个代码段,因此我省略了比例尺和轴,因为我知道它们可以正常工作。
分配路径"d"
属性的位置
.attr("d", line)
line(d)
最终为每个元素d
的原点被调用。d
预计将是一个点数组。
由于您将数组嵌套在对象中,因此需要提供一个提取balance
数组的函数:
.attr("d", function(d) { return line(d.balance); })
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句