基本D3.js:使用数据键

Basic D3.js: using data keys?

本文关键字:数据 D3 js 基本      更新时间:2023-09-26

这应该是一个相当简单的D3问题。我将数据绑定到一些圆圈,这是数据:

var linedata = [{ x:10, y:20},{x:5, y:30}];

下面是圆圈:

var line = d3.svg.line().x(function(d) {
    return x(d.x);
 }).y(function(d) {
    return y(d.y);
});
context.selectAll(".dot")
  .data(linedata).enter()
  .append("circle")
  .attr("class", "dot")
  .attr("cx", line.x())
  .attr("cy", line.y())
  .attr("r", 2);

然而,如果我想更改数据和代码以使用一些数据键,这样圆就可以附加类:

var mydata = [{ name: 'LHR', data: [{ x:10, y:20}, {x:5, y:15} ], { name: 'SFO', data : [{x:5, y:30}, {x:4, y:8}] }];

我知道如何编辑class属性以使用数据键,但如何编辑cx和cy属性?

context.selectAll(".dot")
  .data(mydata).enter()
  .append("circle")
  .attr("class", function(d) { return "dot " + d.name; })
  .attr("cx", line.x()) 
  .attr("cy", line.y())
  .attr("r", 2);

我尝试过以下方法,但不起作用:

.attr("cx", function(d) { return line.x(d.data); })

这似乎将函数本身分配给了cx属性。我做错了什么?

mydata变量在数据数组后缺少一个}以关闭主数组中的对象。也许这是个问题?

此外,当您传递d.data时,您正在传递一个数组。也许可以尝试传递d.data[1]或您想要的任何数组项。

编辑::您可能想要使用.attr('cx', function(d, i) { return line.x(d.data[i]); }

在Alex的回答的帮助下,我想好了——我应该直接传递数组项,而且我根本不应该使用line函数。相反:

context.selectAll(".dot")
  .data(mydata).enter()
  .append("circle")
  .attr("class", function(d) { return "dot " + d.name; })
  .attr("cx", function(d,i) { return x(d.data[i].x); }) 
  .attr("cy", function(d,i) { return y(d.data[i].y); }) 
  .attr("r", 2);