Я изучаю D3.js и пытаюсь разобраться ключи данных , используемые с потоковыми графиками. Я хотел бы адаптировать официальный пример :
... чтобы каждый путь имел явный ключ данных и чтобы при наведении курсора вводился ключ данных.
Официальный пример добавляет пути следующим образом:
var area = d3.svg.area()
.x(function(d) { console.log('x', d.data); return d.x * w / mx; })
.y0(function(d) { return h - d.y0 * h / my; })
.y1(function(d) { return h - (d.y + d.y0) * h / my; });
vis.selectAll("path")
.data(data0)
.enter().append("path")
.style("fill", function() { return color(Math.random()); })
.attr("d", area);
Я попытался адаптировать код следующим образом, но я не уверен, как изменить структуру data0
(в настоящее время это массив массивов), чтобы добиться того, что я хочу:
vis.selectAll("path")
.data(data0, function(d) { return d.name }) // Add key function
.enter().append("path")
.style("fill", function() { return color(Math.random()); })
.attr("d", area)
.on("mouseover", function (d,i) {
console.log("mouseover", d.name); // Log name property on mouseover
});
В нынешнем виде, без внесения каких-либо изменений в структуру data0
, неудивительно, что он не работает. Как я могу добавить свойство name
к data0
, не нарушая при этом функции area
и .data()
?
ОБНОВЛЕНИЕ: чтобы быть немного яснее: в документах D3 говорится, что функция области ожидает двумерный массив . Поэтому, если я изменю data0
с двумерного массива на массив объектов, каждый с ключом name
и ключом data
, как я могу изменить то, что я передаю area
?